2011-08-23 5 views
5

저는 JNI와 협력하고 있습니다. 두 개의 공유 라이브러리를 사용하는 래퍼 라이브러리 (wrapper.so)가 있습니다. one.so 및 two.so공유 라이브러리의 상대 경로

모두 제대로 작동합니다. 모든 * .so는 프로그램 폴더 안의 lib 폴더에 있습니다.

문제는,이 폴더를 다른 컴퓨터에 복사하면 연결 문제가 발생한다는 것입니다.

의 내가 기계 사용자 2 (/ 홈/사용자 2/프로그램)에서이 작업을 실행하고 나는 기계 USER1 (/ 홈/사용자 1/프로그램)에서 컴파일 가정 해 봅시다, 내가 연결 오류 얻을 :

않는 UnsatisfiedLinkError를 : 내가 좋아하는 (부모 프로그램 폴더에 대한 상대 라이브러리의 연결을 만들 수있는 방법 /home/user1/program/lib/one.so

, 내가 컴파일하고있어 this_foler ??/lib에

에 대한 검색과 같은 :

g++ -c -o src/wrapper.o src/wrapper.c 
g++ -shared -o wrapper.so src/wrapper.o one.so two.so 

답변

8

How I can make the linking of the libraries relative to the parent program folder

운영 체제에 따라 다릅니다. 리눅스에서이 아마 작동합니다

g++ -shared -o wrapper.so -Wl,-rpath='$ORIGIN' src/wrapper.o one.so two.so 

참고 : 작은 따옴표는 위의 명령에 중요한이다.

+1

@Rockskull 대답이 작동하는 경우이를 수락하거나 투표를하거나 두 가지 모두를 받아야합니다. 당신이하지 않으면 어떤 사람들은 당신의 질문에 대답하는 시간을 걱정하지 않을 것입니다. –

+0

죄송합니다. 스택 오버플로가 처음입니다. 나는 그것을 받아 들일 수 있지만 투표 할 수는 없다. – lcguida

+0

@EmployedRussian 인텔 컴파일러에 해당하는 명령을 알고 있습니까? 감사. – xslittlegrass