Linker 共享库的相对路径
我和JNI一起工作。我有一个包装器库(wrapper.so),它使用两个共享库:one.so和two.so 一切正常。所有*.so都位于程序文件夹内的lib文件夹中 问题是,如果我将此文件夹复制到另一台计算机,我会遇到链接问题 假设我在一台机器user2(/home/user2/program)上运行它,然后在一台机器user1(/home/user1/program)中编译,我得到了链接错误: 未满足链接错误:/home/user1/program/lib/one.so 如何使库相对于父程序文件夹进行链接(例如,搜索此文件夹/lib 我是这样编译的: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 如何使库相对于父程序文
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'