16.4. GCC에서 정적 라이브러리 사용
정적 라이브러리는 오브젝트 파일을 포함하는 아카이브로 사용할 수 있습니다. 연결한 후 결과 실행 파일의 일부가 됩니다.
Red Hat은 다양한 이유로 정적 연결 사용을 권장하지 않습니다. 16.2절. “정적 및 동적 연결”을 참조하십시오. 특히 Red Hat에서 제공하는 라이브러리에 대해 필요할 때만 정적 링크를 사용합니다.
사전 요구 사항
- GCC가 시스템에 설치되어 있습니다.
- 정적 및 동적 링크의 이해
- 유효한 프로그램을 구성하는 소스 또는 개체 파일 세트로, 일부 정적 라이브러리 foo 및 다른 라이브러리가 없습니다.
-
foo 라이브러리는
libfoo.a
파일로 사용할 수 있으며 동적 연결에는libfoo.so
파일이 제공되지 않습니다.
Red Hat Enterprise Linux의 일부인 대부분의 라이브러리는 동적 연결에만 지원됩니다. 아래 단계는 동적 연결에 사용할 수 없는 라이브러리에서만 작동합니다. 16.6절. “GCC에서 정적 및 동적 library 사용”을 참조하십시오.
절차
소스 및 개체 파일의 프로그램을 연결하려면 정적으로 링크된 라이브러리 foo 를 추가합니다. libfoo.a
:
- 코드가 포함된 디렉터리로 변경합니다.
foo 라이브러리의 헤더를 사용하여 프로그램 소스 파일을 컴파일합니다.
$ gcc ... -Iheader_path -c ...
header_path 를 foo 라이브러리의 헤더 파일이 포함된 디렉터리의 경로로 바꿉니다.
foo 라이브러리와 프로그램을 연결합니다.
$ gcc ... -Llibrary_path -lfoo ...
library_path 를
libfoo.a
파일이 포함된 디렉터리의 경로로 바꿉니다.프로그램을 실행하려면 다음을 실행합니다.
$ ./program
정적 링크와 관련된 -static
GCC 옵션은 모든 동적 연결을 금지합니다. 대신 -Wl,-Bstatic
및 -Wl,-Bdynamic
옵션을 사용하여 링커 동작을 보다 정확하게 제어합니다. 16.6절. “GCC에서 정적 및 동적 library 사용”을 참조하십시오.