gpt4 book ai didi

linux - 在符号和共享库之间强制映射

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:57:56 28 4
gpt4 key购买 nike

我有一个包含四个共享库的可执行文件,依赖树如下所示:可执行文件 appfoo.so 执行 dlopen 并且bar.sofoo.so 依次链接到 fooHelper.sobar.so 链接到 barHelper.so

现在,问题是 fooHelper.sobarHelper.so 有一些相同的符号。例如,假设我们有一个 func,在 fooHelper.sobarHelper.so 中有不同的实现。有没有办法强制 foo.so 使用 fooHelper.so 的实现和 bar.so 使用 barHelper.so 的?目前发生的情况是,根据帮助程序的链接顺序,foo.sobar 使用了 func 的一个实现。所以。这是因为默认的 Unix 链接模型,如果符号的定义已经加载,那么随后加载的共享库中的任何其他定义都会被丢弃。基本上,func 将从首先链接的帮助程序库中获取。我需要一种方法来显式指定适当的映射,而无需更改共享库的源代码。

我正在使用 g++ 4.4 在 Linux 上工作。

最佳答案

Is there a way to force foo.so to use fooHelper.so's implementation and bar.so to use barHelper.so's?

是的:这就是 RTLD_LOCAL 的用途(当 dlopening foo.sobar.so 时) .

RTLD_LOCAL
This is the converse of RTLD_GLOBAL, and the default if neither flag
is specified. Symbols defined in this library are not made available
to resolve references in subsequently loaded libraries.

关于linux - 在符号和共享库之间强制映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13717877/

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