linux - 我可以在已编译的二进制文件中更改 'rpath' 吗?

我有一个计划用于废料堆的旧可执行文件,但它还没有。它依赖于一些已从我的环境中删除的库,但我有一些 stub 库可以正常工作。我想将此可执行文件指向这些 stub 库。是的,我可以设置 LD_LIBRARY_PATH,但是这个可执行文件是从许多脚本和许多用户中调用的,我很想在一个地方修复它。

我没有这方面的来源,而且很难得到。我在想 - 我可以编辑这个文件,使用一个 ELF 感知编辑器,并添加一个简单的 PATH 到 rpath 让它命中新的库吗?这可能吗,或者一旦你创建了一个 ELF 二进制文件,你将东西固定到位置并且它们不能移动?

最佳答案

有一个比 chrpath 更通用的工具,叫做 patchelf .它最初是为为 Nix 和 NixOS(打包系统和 GNU/Linux 发行版)制作包而创建的。

如果二进制文件中没有 rpath(这里称为 rdsamp),chrpath 会失败:

chrpath -r '$ORIGIN/../lib64' rdsamp 
rdsamp: no rpath or runpath tag found.

另一方面,

patchelf --set-rpath '$ORIGIN/../lib64' rdsamp

成功就好了。

关于linux - 我可以在已编译的二进制文件中更改 'rpath' 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13769141/

相关文章:

python - Django 可选 url 参数

linux - 如何强制 'cp' 覆盖目录而不是在里面创建另一个目录?

linux - 如何在 Ubuntu 中增加 Neo4j 的最大文件打开限制(ulimit)?

linux - GNU screen 没有响应,似乎被阻塞了

linux - 如何在 linux bash/shell 中对图像进行 base64 编码

python - 如何检查两个日期之间的差异(以秒为单位)?

python - 什么是字典 View 对象?

python - Python 有包/模块管理系统吗?

linux - 解压 tar.gz 文件

python - 如何将一串字节转换为int?