此页面- 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呢?
RPATH
RUNPATH
有人可以解释情况吗?
运送二进制文件时,最好为用户提供使二进制文件适应其自身系统细节的方法,其中包括调整库搜索路径。
用户通常可以调整LD_LIBRARY_PATH和/etc/ld.so.conf,两者的优先级均低于DT_RPATH,即您不能覆盖二进制文件中的硬编码内容,而如果使用DT_RUNPATH,则用户可以使用进行覆盖LD_LIBRARY_PATH。
LD_LIBRARY_PATH
/etc/ld.so.conf
DT_RPATH
DT_RUNPATH
(FWIW,我认为ld.so.conf也应该优先于DT_RUNPATH,但无论如何,至少我们有LD_LIBRARY_PATH)。
ld.so.conf
另外,我强烈不同意以上使用的建议DT_RPATH。IMO,最好DT_RPATH不要DT_RUNPATH在出厂的二进制文件中使用。
除非
您附带了所有依赖库和可执行文件,并希望确保在安装后使用JustWork(tm),在这种情况下请使用DT_RPATH。