我正在尝试更改共享对象的 RUNPATH,但收到错误消息,指出它不能超过 6 个字符。这是什么原因呢?这是chrpath
Raspbian 上的 0.16 版本。
$ chrpath -r ../../.. lib/vlc/plugins/access_output/libaccess_output_srt_plugin.so
lib/vlc/plugins/access_output/libaccess_output_srt_plugin.so: RUNPATH=../lib
new rpath '../../..' too large; maximum length 6
我能够使用设置更长的路径patchelf
。
答案1
chrpath
如果标签不存在,则无法添加RPATH
标签,并且无法扩展标签;因此,新路径的长度必须等于或短于现有路径。您的库最初RUNPATH
设置为 to ../lib
,因此chrpath
只能将其替换为最多六个字符的路径。
patchelf
没有这个限制。
答案2
rpath
或 的新路径集runpath
不能大于最初存储的值(Code Yarns 网站)。
您的前一个rpath
正好是 6 个字符,在../lib
您的示例中。你不能延长它。
正如 @R Perrin 所说,chrpath
不会使用现有空间重写整个 ELF 文件,现有空间本身仅限于最初设置的空间。