2. 정적 라이브러리

정적 라이브러리는 단순히 보통의 목적파일(object file)의 모음이다. 관례적으로, 정적 라이브러리는 ``.a''의 확장자로 끝난다. 이것은 ar(archiver)프로그램에 의해서 만들어진다. 정적 라이브러리는 나중에 설명될 공유 라이브러리의 이점들 때문에 예전만큼 많이 쓰이지는 않는다. 하지만, 아직도 이것들은 만들어지고, 역사적으로 처음으로 생겼고, 설명하기에 쉽다.

정적 라이브러리는 사용자들이 프로그램을 다시 컴파일하지 않아도 링크시킬수 있도록 해주기 때문에, 컴파일 시간을 줄여준다. 오늘날의 빠른 컴파일러를 보면 재 컴파일 시간은 그다지 중요한 요소가 아니기 때문에, 이것은 예전만큼 이점이 되지 못한다. 정적 라이브러리는 프로그래머들이 라이브러리를 링크하게는 허락하고 싶은데, 소스코드를 공개하고 싶지 않을 때에 유용하다(이것은 라이브러리 판매자에게 유용할 수 있겠지만, 이 라이브러리를 사용하려는 프로그래머에게는 이점이 아니다). 이론적으로, 실행화일에 링크되는 정적 ELF라이브러리 코드는 공유 라이브러리나 동적 적재 라이브러리보다 1-5%정도 빠르게 동작해야 한다. 하지만, 실재적으로 다른 몇몇 요소들 때문에 이런 현상은 거의 나타나지 않게 된다.

정적 라이브러리를 만들거나, 존재하는 동적 라이브러리에 오브젝트 파일을 추가하기 위해서 다음과 같은 명령을 사용하라:

ar rcs my_library.a file1.o file2.o

이 예제 명령은 오브젝트 파일 file1.o, file2.o를 정적 라이브러리 my_library.a에 추가하고, 만약 my_library.a가 존재하지 않는다면 만드는 것이다. 정적 라이브러리를 만드는 것에 대해 더 많은 정보를 보려면 ar(1)을 참조하라.

당신이 정적 라이브러리를 만들었다면, 그것을 사용하고 싶어 할 것이다. 당신은 실행화일을 만들때, 컴파일, 링크 과정에서 정적 라이브러리를 부를 수 있다. 만약 실행화일을 만들기 위해 gcc(1)을 사용한다면, 라이브러리를 표시하기 위해 -l 옵션을 사용할 수 있다; 더 많은 정보를 위해 gcc를 찾아보라. 또한, -l, -L등의 옵션을 지원하는 ld(1) 링커를 사용할 수 있다; 그러나, 대부분의 경우 ld(1)을 사용하는 것보다 gcc(1)을 사용하는 것이 좋다. ld(1)이 더 많이 바뀌기 때문이다.