共享库的相对路径

lcg*_*ida 5 java-native-interface linker shared g++

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

一切正常.所有*.so都在程序文件夹中的lib文件夹中.

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

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

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
Run Code Online (Sandbox Code Playgroud)

Emp*_*ian 9

如何使库相对于父程序文件夹链接

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

g++ -shared -o wrapper.so -Wl,-rpath='$ORIGIN' src/wrapper.o one.so two.so
Run Code Online (Sandbox Code Playgroud)

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