我有一个计划用于废料堆的旧可执行文件,但它还没有。它依赖于一些已从我的环境中删除的库,但我有一些 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/