使用RPATH而不使用RUNPATH? [英] use RPATH but not RUNPATH?
本文介绍了使用RPATH而不使用RUNPATH?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
This page表示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是在运行它们之前设置的。那么,将
RPATH
与RUNPATH
一起使用是不好的,因为RUNPATH
种类取消了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,最好在附带的二进制文件中使用netherDT_RPATH
而不是DT_RUNPATH
。
除非
您将所有依赖库与可执行文件一起提供,并希望确保安装后的内容为JustWork(Tm),在本例中使用DT_RPATH
。
这篇关于使用RPATH而不使用RUNPATH?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文