gcc - 链接共享库绝对路径与相对路径
问题描述
我一直在尝试将共享库链接到我的程序中,并且我希望它的路径与我的 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。
解决方案
问题是第一个文件。我不希望 Winter_fresh 的库成为绝对路径
当您像这样链接到您的库时,通常会发生这种情况:
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
推荐阅读
- php - 在 Wordpress 管理员中加载脚本时出错
- mysql - 存储两个字符而不关心它们的顺序
- azure - Azure 负载均衡器我无法选择目标虚拟机
- c - 使用 fork 创建进程树
- python - 在 Python 中使用颜色标度可视化移动速度
- c# - 使用 WSDL 端点时拒绝访问错误
- c++ - 如何将部分流作为参数传递?
- ios - Swift iOS Firebase - 如何结合 queryOrdered(byChild) 和 GeoFire observe(.keyEntered) 来同时获取快照和位置结果?
- excel - 查找多个条件的 Excel 公式
- ios - Swift 4.2 使用 UICollectionViewCell 添加/删除按钮