使用RPATH但不使用RUNPATH?

此页面- 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呢?

有人可以解释情况吗?

回答:

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

用户通常可以调整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

以上是 使用RPATH但不使用RUNPATH? 的全部内容, 来源链接: utcz.com/qa/410534.html

回到顶部