16.5. GCC에서 동적 라이브러리 사용
동적 라이브러리는 연결 시간과 런타임 모두에 필요한 독립 실행형 실행 파일로 사용할 수 있습니다. 애플리케이션의 실행 파일과는 별개로 유지됩니다.
사전 요구 사항
- GCC가 시스템에 설치되어 있습니다.
- 유효한 프로그램을 구성하는 소스 또는 개체 파일 세트로, 일부 동적 라이브러리 foo 및 다른 라이브러리가 없습니다.
- libfoo.so파일로 사용 가능한 foo 라이브러리
프로그램 Against a Dynamic Library
동적 라이브러리 foo 에 대해 프로그램을 연결하려면 다음을 수행합니다.
$ gcc ... -Llibrary_path -lfoo ...
프로그램이 동적 라이브러리와 연결되어 있는 경우 결과 프로그램은 항상 런타임에 라이브러리를 로드해야 합니다. 라이브러리를 찾는 데는 두 가지 옵션이 있습니다.
-
실행 파일 자체에 저장된
rpath
값 사용 -
런타임 시
LD_LIBRARY_PATH
변수 사용
실행 가능한 파일에 rpath
Value Stored 사용
rpath
는 연결될 때 실행 파일의 일부로 저장되는 특수 값입니다. 나중에 프로그램이 실행 파일에서 로드되면 런타임 링커는 rpath
값을 사용하여 라이브러리 파일을 찾습니다.
GCC 와 연결하는 동안 path library_path 를 rpath
로 저장합니다.
$ gcc ... -Llibrary_path -lfoo -Wl,-rpath=library_path ...
경로 library_path 는 libfoo.so 파일이 포함된 디렉터리를 가리켜야 합니다.
-Wl,-rpath=
옵션 뒤에는 공백이 없습니다.
나중에 프로그램을 실행하려면 다음을 실행합니다.
$ ./program
LD_LIBRARY_PATH 환경 변수 사용
프로그램의 실행 파일에 rpath
를 찾을 수 없는 경우 런타임 링커는 LD_LIBRARY_PATH
환경 변수를 사용합니다. 이 변수의 값은 공유 라이브러리 오브젝트가 있는 경로에 따라 각 프로그램에 대해 변경해야 합니다.
library_path 에 있는 라이브러리를 사용하여 rpath
가 설정되지 않은 프로그램을 실행하려면 다음을 실행합니다.
$ export LD_LIBRARY_PATH=library_path:$LD_LIBRARY_PATH
$ ./program
rpath
값을 제외하면 유연성이 제공되지만, 프로그램을 실행할 때마다 LD_LIBRARY_PATH
변수를 설정해야 합니다.
라이브러리를 기본 디렉터리에 배치
런타임 링커 구성은 여러 디렉터리를 동적 라이브러리 파일의 기본 위치로 지정합니다. 이러한 기본 동작을 사용하려면 라이브러리를 적절한 디렉터리에 복사합니다.
동적 링커 동작에 대한 자세한 설명은 이 문서의 범위를 벗어납니다. 자세한 내용은 다음 리소스를 참조하십시오.
동적 링커의 Linux 도움말 페이지:
$ man ld.so
/etc/ld.so.conf
설정 파일의 내용:$ cat /etc/ld.so.conf
디렉터리가 포함된 추가 구성없이 동적 링커에서 인식하는 라이브러리의 보고:
$ ldconfig -v