2011-08-23 118 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

取決於您的操作系統。在Linux上,這將可能工作:

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

注:單引號重要在上面的命令。

+1

@Rockskull如果答案有效,你應該接受它,或者兩者都投票。如果你不這樣做,有些人可能不會麻煩地回答你的問題。 –

+0

對不起。新的堆棧溢出。我接受它,但我不能投票。 – lcguida

+0

@EmployedRussian您是否知道intel編譯器的相應命令?謝謝。 – xslittlegrass