我可以在已编译的二进制文件中更改“rpath”吗?

我有一个旧的可执行文件计划为废品堆,但它还没有。 它依赖于已经从我的环境中删除了一些库,但我有一些存根库位于哪里工作正常。 我喜欢把这个可执行文件指向这些存根库。 是的,我可以设置LD_LIBRARY_PATH,但是这个可执行文件是从很多脚本中调用的,而且很多用户和我很想在一个地方修复它。

我没有这方面的资料,而且很难得到它。 我在想 – 我可以编辑这个文件,使用ELF感知编辑器,并添加一个简单的path到rpath,让它打到新的库? 这是可能的,或者一旦你创build一个ELF二进制文件,你修复的东西位置,他们不能被移动?

有一个名为chrpath的工具可以做到这一点 – 它可能在你的发行包中可用。

chrpath有一个比chrpath更通用的工具。 它最初创build用于制作Nix和NixOS(包装系统和GNU / Linux发行版)的软件包。

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

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

另一方面,

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

成功就好。

这工作对我来说,用$ ORIGINreplaceXORIGIN。

chrpath -r '\$\ORIGIN/../lib64' httpd