2008-10-16 7 views
36

GCC를 사용하여 실행 파일을 링크하고자하는 공유 라이브러리가 있습니다. 공유 라이브러리에는 libNAME.so 형식이 아닌 비표준 이름이 있으므로 일반 -l 옵션을 사용할 수 없습니다. (파이썬 확장이기도하고 'lib'접두어가 없습니다.)libNAME.so 명명 규칙을 따르지 않는 라이브러리에 대해 -l도 하드 코딩 경로없이 GCC를 사용하여 링크하는 방법?

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

:

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

실행 파일로 하드 코딩 할 수있는 경로를 유발하지 않고이 라이브러리에 연결하는 방법이 있나요? 당신은 g의 ++는 다음 호출 작업 디렉토리에 공유 라이브러리를 복사 할 수있는 경우

답변

57

사용할 수 있습니다. 당신이 _mylib.so에 대한 귀하의 경로를 검색해야

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

를 사용하는 경우.

+1

이것은 선생님이 찾고자하는 것입니다. 감사! – kbluck

+0

도와 줘서 고마워. –

+2

이 결과는 표준 sonames에 대해 일반적으로하는 것처럼'_mylib.so' 만 포함하는 대신'-l :'을 사용하여 링크 된 라이브러리에'build/bin/_mylib.so'가 임베드 된 결과입니다. 결과적으로,'_mylib.so'를로드하려고하면, 그 전체 경로 ('ldd'는 그것을 보여줄 것입니다)를 찾고,'_mylib.so'를 찾지 않을 것입니다. –

2

이 작동합니다 : 당신이 유닉스 또는 리눅스에있는 경우

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

난 당신이 라이브러리에 대한 심볼릭 링크를 만들 수 있다고 생각 라이브러리를 원할 디렉토리. 예를 들어

: ":"당신이 당신의 라이브러리에 다른 이름을 부여 할 수 있습니다 접두사
ln -s build/bin/_mylib.so build/bin/lib_mylib.so

그런 다음이있다 -l_mylib

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