Search
Duplicate
📚

Libft 과제에서 만든 라이브러리(libft.a)를 사용해보자

간단소개
팔만코딩경 컨트리뷰터 (Library DB (속성)에 관계됨)에 관계됨
ContributorNotionAccount
주제 / 분류
라이브러리
gcc
컴파일
태그
컴파일
링킹
libft
Scrap
8 more properties

기본 개념

실행 파일(.out/.exe)을 생성하는 것 → ‘빌드(builld)’ 빌드(build)를 위해서는 컴파일(compile)에 더불어 링크(link) 과정이 필요하다. 흔히 소스 파일로부터 실행 파일을 생성하는 일련의 과정을 통틀어 ‘컴파일한다’고 말하지만 정확히는 ‘빌드한다’고 말하는 것이 옳다.
소스 파일(.c)을 컴파일한 오브젝트 파일(.obj)과 라이브러리 파일(.lib)을 링크시켜 최종적으로 실행 파일을 만든다.
일반적으로 실행 파일(리눅스는 .out, 윈도우는 .exe)을 만들기 위해서 소스 코드를 컴파일하여 만들어진 obj파일들을 링커가 하나로 묶는다. 라이브러리를 사용했다면 이때 라이브러리 파일도 함께 링크된다.
Libft 과제에서 우리는 정적 라이브러리 파일(확장자 .a)를 만들었다. 이 정적 라이브러리를 사용하려면 링크 단계에서 링커가 libft.a 파일도 같이 묶어서 하나의 실행 파일을 만들어야 한다. (정적 라이브러리이므로 최종적으로 생성되는 실행 파일 안에 현재 libft.a의 내용이 그대로 들어가게 된다.)
참고 : 윈도우/리눅스에서 라이브러리 파일의 확장자명

사용법

컴파일러에게 링크할 라이브러리를 명시해줘야한다. gcc 명령어 옵션을 통해 링크할 라이브러리의 이름과 라이브러리 파일의 위치를 명시할 수 있다.
링크와 관련된 자세한 옵션은 linker의 메뉴얼 페이지 man ld에서 확인할 수 있다. (ld는 LoaDer의 약자임)

링크할 라이브러리 명시 : l 옵션 (소문자 엘)

x는 링크할 라이브러리의 이름
링크할 라이브러리를 명시하는 옵션
대상 라이브러리 파일의 이름에서 앞의 lib와 뒤의 .a를 때고 인식한다.
예를 들어 libft.a 라이브러리 파일을 링크시키고 싶을때, ft로 명시해야한다. 즉 l까지 포함해 -lft 로 옵션을 주면 된다.

링크할 라이브러리 파일의 디렉토리(위치) 명시 : L 옵션 (대문자 엘)

기본적으로 리눅스는 /lib, /usr/lib, /usr/local/lib 만을 검색해서 라이브러리를 찾는다. 그러므로 추가적으로 디렉토리를 검색하도록 하려면 -L 옵션을 사용하면 된다.
라이브러리 파일이 있는 디렉토리 위치를 명시하는 옵션
L 뒤에 디렉토리명을 적으면 된다.
즉 만약 현재 디렉토리에서 탐색하도록 하고싶다면 -L. 를 옵션으로 주면 된다

사용법 예시

cc main.c -L. -lft
Shell
`main.c` 소스 파일을 현재 디렉토리(`.`)에 있는`libft.a`파일과 링크하는 명령어
gcc test.c -L./libft -lft
Shell
`test.c` 소스 파일을 디렉토리(`./libft`)에 있는`libft.a`파일과 링크하는 명령어
물론 소스 파일 내부에 사용할 라이브러리 함수의 원형(prototype)이 선언되어있어야하므로, 헤더 파일을 include해줘야한다.
위처럼 경로를 지정하여 외부 디렉토리에 있는 헤더 파일도 include할 수 있으니 참고할 것!