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