Linker 共享库的相对路径

Linker 共享库的相对路径,linker,g++,java-native-interface,shared,Linker,G++,Java Native Interface,Shared,我和JNI一起工作。我有一个包装器库(wrapper.so),它使用两个共享库:one.so和two.so 一切正常。所有*.so都位于程序文件夹内的lib文件夹中 问题是,如果我将此文件夹复制到另一台计算机,我会遇到链接问题 假设我在一台机器user2(/home/user2/program)上运行它,然后在一台机器user1(/home/user1/program)中编译,我得到了链接错误: 未满足链接错误:/home/user1/program/lib/one.so 如何使库相对于父程序文

我和JNI一起工作。我有一个包装器库(wrapper.so),它使用两个共享库:one.so和two.so

一切正常。所有*.so都位于程序文件夹内的lib文件夹中

问题是,如果我将此文件夹复制到另一台计算机,我会遇到链接问题

假设我在一台机器user2(/home/user2/program)上运行它,然后在一台机器user1(/home/user1/program)中编译,我得到了链接错误:

未满足链接错误:/home/user1/program/lib/one.so

如何使库相对于父程序文件夹进行链接(例如,搜索此文件夹/lib

我是这样编译的:

g++ -c -o src/wrapper.o src/wrapper.c
g++ -shared -o wrapper.so src/wrapper.o one.so two.so
如何使库相对于父程序文件夹进行链接

取决于您的操作系统。在Linux上,这可能会起作用:

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

注意:单引号在上面的命令中很重要。

@Rockskull如果答案有效,你应该接受它,投赞成票,或者两者兼而有之。如果你不同意,有些人下次可能不会麻烦回答你的问题。对不起,新的堆栈溢出。我接受它,但我不能投赞成票。@EmployedRussian你知道inte的相应命令吗l编译器?谢谢。@xslittlegrass
-Wl,
语法是非常通用的,并且应该也得到
icc
的支持,至少从我所能看出,我无法从makefile.had-Wl,-rpath=RIGIN/./Lib输出中工作。使用double$$为我解决它。因此,如果这是在makefile中,请使用-Wl,-rpath='$$ORIGIN'