使用RPATH而不使用RUNPATH? [英] use RPATH but not RUNPATH?

查看:39
本文介绍了使用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是在运行它们之前设置的。

那么,将RPATHRUNPATH一起使用是不好的,因为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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆