一尘不染

使用RPATH但不使用RUNPATH?

linux

此页面- http://labs.qt.nokia.com/2011/10/28/rpath-and-
runpath/
-说,大约为了在ld.so库搜索:

Unless loading object has RUNPATH:
    RPATH of the loading object,
        then the RPATH of its loader (unless it has a RUNPATH), ...,
        until the end of the chain, which is either the executable
        or an object loaded by dlopen
    Unless executable has RUNPATH:
        RPATH of the executable
LD_LIBRARY_PATH
RUNPATH of the loading object
ld.so.cache
default dirs

然后建议:

运送二进制文件时,请使用RPATH而不是RUNPATH或确保在运行它们之前已设置LD_LIBRARY_PATH。

那么,RPATHwith的使用RUNPATH是不好的,因为RUNPATHkind-
of会取消,RPATH因此间接动态加载无法按预期工作?但是,为什么然后RPATH不赞成RUNPATH呢?

有人可以解释情况吗?


阅读 456

收藏
2020-06-02

共1个答案

一尘不染

运送二进制文件时,最好为用户提供使二进制文件适应其自身系统细节的方法,其中包括调整库搜索路径。

用户通常可以调整LD_LIBRARY_PATH/etc/ld.so.conf,两者的优先级均低于DT_RPATH,即您不能覆盖二进制文件中的硬编码内容,而如果使用DT_RUNPATH,则用户可以使用进行覆盖LD_LIBRARY_PATH

(FWIW,我认为ld.so.conf也应该优先于DT_RUNPATH,但无论如何,至少我们有LD_LIBRARY_PATH)。

另外,我强烈不同意以上使用的建议DT_RPATH。IMO,最好DT_RPATH不要DT_RUNPATH在出厂的二进制文件中使用。

除非

您附带了所有依赖库和可执行文件,并希望确保在安装后使用JustWork(tm),在这种情况下请使用DT_RPATH

2020-06-02