programing

libNAME.so 명명 규칙을 따르지 않는 라이브러리의 -l 또는 하드코드 경로를 사용하지 않고 GCC를 사용하여 링크하려면 어떻게 해야 합니까?

javaba 2022. 8. 12. 22:59
반응형

libNAME.so 명명 규칙을 따르지 않는 라이브러리의 -l 또는 하드코드 경로를 사용하지 않고 GCC를 사용하여 링크하려면 어떻게 해야 합니까?

GCC를 사용하여 실행 파일을 링크하는 공유 라이브러리가 있습니다.공유 라이브러리의 이름은 libNAME.so 형식이 아니기 때문에 일반 -l 옵션을 사용할 수 없습니다.(또한 Python 확장자이므로 'lib' 접두사는 없습니다.)

라이브러리 파일의 경로를 링크 명령줄에 직접 전달할 수 있지만 이로 인해 라이브러리 경로가 실행 파일에 하드 코딩됩니다.

예를 들어 다음과 같습니다.

g++ -o build/bin/myapp build/bin/_mylib.so

경로를 실행 파일에 하드코드하지 않고 이 라이브러리에 링크할 수 있는 방법이 있습니까?

라이브러리에 다른 이름을 지정할 수 있는 접두사 ":"가 있습니다.사용하시는 경우

g++ -o build/bin/myapp -l:_mylib.so other_source_files

는 _mylib.so 경로를 검색합니다.

g++ 가 기동되었을 때에 공유 라이브러리를 작업 디렉토리에 카피할 수 있는 경우는, 다음과 같이 동작합니다.

g++ -o build/bin/myapp _mylib.so other_source_files

Unix 또는 Linux를 사용하는 경우 라이브러리를 원하는 디렉토리에 라이브러리에 대한 심볼릭 링크를 만들 수 있습니다.

예를 들어 다음과 같습니다.
ln -s build/bin/_mylib.so build/bin/lib_mylib.so

그 후, 다음과 같이 사용할 수 있습니다.-l_mylib

http://en.wikipedia.org/wiki/Symbolic_link

언급URL : https://stackoverflow.com/questions/207069/how-to-link-using-gcc-without-l-nor-hardcoding-path-for-a-library-that-does-not

반응형