首页 > 解决方案 > 链接共享库绝对路径与相对路径

问题描述

我一直在尝试将共享库链接到我的程序中,并且我希望它的路径与我的 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。

标签: gcccmakelinkershared-libraries

解决方案


问题是第一个文件。我不希望 Winter_fresh 的库成为绝对路径

当您像这样链接到您的库时,通常会发生这种情况:

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

推荐阅读