就像@user7610 所说,正确的方法是patchelf
工具。
但是,我觉得我可以给出一个更全面的答案,涵盖所有需要执行此操作的命令。
有关该主题的综合文章,请单击此处
首先,很多开发者都在谈论RPATH
,但实际上他们的意思是RUNPATH
。这是两个不同的可选动态部分,加载器处理它们的方式非常不同。您可以在我之前提到的链接中阅读有关它们之间区别的更多信息。
现在,请记住:
- 如果
RUNPATH
已设置,RPATH
则忽略
RPATH
已弃用,应避免使用
RUNPATH
是首选,因为它可以被覆盖LD_LIBRARY_PATH
查看当前的 R[UN]PATH
readelf -d <path-to-elf> | egrep "RPATH|RUNPATH"
清除 R[UN]PATH
patchelf --remove-rpath <path-to-elf>
笔记:
将值添加到 R[UN]PATH
patchelf [--force-rpath] --set-rpath "<desired-rpath>" <path-to-elf>
笔记:
<desired-path>
是一个冒号分隔的目录列表,例如:/my/libs:/my/other/libs
- 如果指定
--force-rpath
,则设置RPATH
,否则设置RUNPATH