linux as ld gcc 更新,linux – 如何使用GCC / LD设置RPATH和RUNPATH?

我最近在升级系统后遇到了这个问题:使用GCC -Wl,-rpath =选项的工作方式与以前不同.

我用它来设置一些共享库的搜索路径,这些库是在我项目的子模块中构建的.当时我认为它比在系统范围内设置LD_LIBRARY_PATH更好(我不想每次打开电脑时都设置它).一切都很好,这两种方法似乎相同.

现在它接收到-rpath的行为已经改变了.它仍适用于直接依赖库,但不适用于通过-rpath =链接同一目录集中的其他库的库.导出LD_LIBRARY_PATH仍然像以前一样工作.

我使用readelf检查了编译的输出,但有一点不同.在升级之前(Linux Mint 18.2 with GCC 5.4),Dynamic部分有这一行:

0x000000000000000f (RPATH) Library rpath: [submod/lib]

升级后(Linux Mint 19 with GCC 7.3),该行改为:

0x000000000000001d (RUNPATH) Library runpath: [submod/lib]

在use RPATH but not RUNPATH?中,建议将RPATH替换为RUNPATH(或者它至少服务器具有不同的目的,因为它具有较低的优先级),但它没有给出为什么这会影响间接链接的答案.库本身在readelf输出中既没有RPATH,也没有RUNPATH.

所以我的问题是:为什么链接器突然开始以不同的方式解释-rpath =选项,是否有办法强制旧的行为? (或者做一些不同的事情,产生相同的结果.)

另一个问题是:是否有可能告诉旧版本的链接器产生新的输出(即RUNPATH而不是RPATH)?

编辑

这不是How to set RunPath of a binary?的重复 – 我的问题恰恰相反:我想要RPATH的行为.我想通了(感谢评论中的提示),我将在这里回答我的问题.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值