gcc - 链接共享库绝对与相对路径

标签 gcc cmake linker shared-libraries

我一直在尝试将共享库链接到我的程序中,我希望它的路径与我的 RPATH 相关。

但是,当我运行ldd时,我注意到共享库的绝对路径是链接的。任何想法为什么?

编辑:

/home/projects/my_files/winter_fresh.so
libgcc_s.so.1 => /home/tomo/anaconda3/lib/libgcc_s.so.1 (0x00007f0a3bf64000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f0a3bd47000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0a3b97d000)
/lib64/ld-linux-x86-64.so.2 (0x00007f0a3e369000)
libstdc++.so.6 => /home/tomo/anaconda3/lib/libstdc++.so.6 (0x00007f0a3b643000)

问题是第一个文件。我不希望 Winter_fresh 的库成为绝对路径,因为我有一个包含它的 RPATH。

最佳答案

The issue is the first file. I don't want the library for winter_fresh to be an absolute path



当您像这样链接到您的库时,通常会发生这种情况:
gcc ... /home/projects/my_files/winter_fresh.so ...

而您的图书馆没有 SONAME (您在构建它时没有使用 -soname 链接器选项)。

要解决此问题,请添加 SONAMEwinter_fresh.so (一般来说是一个很好的做法),或者像这样链接它:
gcc ... -L /home/projects/my_files -l:winter_fresh.so

更好的方法可能是重命名 winter_fresh.solibwinter_fresh.so ,然后像这样链接它:
gcc ... -L /home/projects/my_files -lwinter_fresh

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

相关文章:

c++ - 创建自定义#warning 标志

objective-c - 在 Linux 中使用 objective-c 捕获异常

cmake - 哪个CMake版本最低?

c++ - 编译 boost 程序

c - 在纯 C 的 gcc 中禁用命名返回值优化

c++ - 一段用 gcc 而不是 g++ 编译的代码

windows - 如何将 Qt 与 Rust 一起使用?

c++ - #include 父目录的文件

c++ - "multiple definition of value"在 g++ 而非 gcc 中编译具有未初始化全局的 C 程序时

c++ - 具有不同内联函数定义的函数对象的实例化取决于链接顺序