linker - 共享库的相对路径

标签 linker g++ java-native-interface shared

我正在与 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

最佳答案

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

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

关于linker - 共享库的相对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7164658/

相关文章:

c++ - 我如何强制 Windows.h 在 Visual Studio 中静态链接而不是动态链接?

c - C启动代码是否改变数据地址

java - 使用 x86javapath 的 x64 机器上的 x86java 上的 JNI 不满足链接错误

内部类中的 Scala 原生方法

embedded - SDCC 代码银行

qt - ld : library not found for -lqscintilla2

c++ - 从多个 C++ 文件构建 .so 文件并使用它

C++ 将引用变量传递给 g++-4.7.4 中的线程

c++ - 警告 : 'auto' type specifier is a C++11 extension

android - android项目中jni和cpp包的区别