---
description: >-
  ft_printf 과제를 진행하려면 이 전 과제로 만든 libft 정적 라이브러리를 사용해야한다. 어떻게 ft_printf 소스파일과
  libft.a 라이브러리 파일을 함께 컴파일할 수 있는지 정리해보았다.
---

# 외부 라이브러리 GCC로 컴파일 하기

## **1. 개념**

ft\_printf 과제를 진행하려면 이 전 과제로 만든 libft 정적 라이브러리를 사용해야한다. 어떻게 ft\_printf 소스파일과 libft.a 라이브러리 파일을 함께 컴파일할 수 있는지 정리해보았다.

일반적으로 실행 파일을 만들 때는 소스 코드를 컴파일 하고 만들어진 obj 파일을 링커가 하나로 묶어 `.out` (윈도우는 .exe) 파일을 만든다. 정적 라이브러리를 사용하려면 **링크 단계에서 링커가 `.a`파일도 같이 묶어서 하나의 `.out` 파일을 만들어야 한다.**

즉, 컴파일에 성공해 만들어지는 `.out` 파일 (ft\_printf 과제에서는 `libftprintf.a` 파일) 안에 lib의 내용이 모두 들어가게 된다.

## **2. 사용하기**

GCC컴파일러에게 링크할 라이브러리를 명시해주는 작업이 필요하다. 아래의 gcc 명령어 옵션을 사용하면 된다.

### `-l` 옵션 (소문자 엘)

* 링크할 라이브러리를 명시하는 옵션이다.
* 정적 라이브러리를 링크시키는데 사용되며 대상 라이브러리 파일의 이름에서 앞의 `lib`와 뒤의 `.a`를 때고 인식한다.
* 예를 들어 `libft.a` 라이브러리 파일을 링크시키려면 `-lft` 로 옵션을 주면 된다.

그렇다면 컴파일러가 라이브러리를 찾을 수 있도록 검색할 위치를 명시해 주는 작업도 필요할 것이다. 기본적으로 리눅스는 `/lib, /usr/lib, /usr/local/lib` 만을 검색해서 라이브러리를 찾는다. 그러므로 추가적으로 디렉토리를 검색하도록 하려면 아래의 `-L` 옵션을 사용하면 된다.

### `-L` 옵션 (대문자 엘)

* 라이브러리 위치를 정해주는 옵션이다.
*   사용은 다음과 같이 `-L<디렉토리명>` 으로 한다.

    ```
      $ ar rcs libftprintf.a libftprintf.o -L./libft -lft
    ```

참고

[c 라이브러리 파일, gcc 컴파일](https://nicewoong.github.io/development/2018/02/24/c-library-gcc-compile/)
