gpt4 book ai didi

c - 使用 RPATH 但不使用 RUNPATH?

转载 作者:IT王子 更新时间:2023-10-29 00:14:09 32 4
gpt4 key购买 nike

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

然后建议:

When you ship binaries, either use RPATH and not RUNPATH or ensureLD_LIBRARY_PATH is set before they are run.

因此,将 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,最好在交付的二进制文件中使用下层 DT_RPATH 而不是 DT_RUNPATH

除非

您将所有依赖库与您的可执行文件一起发送,并希望确保 JustWork(tm) 在安装后运行,在这种情况下使用 DT_RPATH

关于c - 使用 RPATH 但不使用 RUNPATH?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7967848/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com