我一直在尝试将共享库链接到我的程序中,我希望它的路径与我的 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
链接器选项)。要解决此问题,请添加
SONAME
至 winter_fresh.so
(一般来说是一个很好的做法),或者像这样链接它:gcc ... -L /home/projects/my_files -l:winter_fresh.so
更好的方法可能是重命名
winter_fresh.so
至 libwinter_fresh.so
,然后像这样链接它:gcc ... -L /home/projects/my_files -lwinter_fresh
关于gcc - 链接共享库绝对与相对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50556472/