gpt4 book ai didi

linux - 加载共享库时,它是否可能引用当前二进制文件中的某些内容?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:23:49 24 4
gpt4 key购买 nike

假设我有一个二进制server,当它被编译时,它从server.cstatic_lib.a 链接,并动态地与dynamic_lib.so.

当服务器执行并动态加载 dynamic_lib.so 时,但是在代码路径上,dynamic_lib.so 实际上需要来自 static_lib.a< 的一些符号。我所看到的是,dynamic_lib.so 引入了 static_lib.so,所以基本上我在内存中有两个 static_lib。

假设我们无法更改 dynamic_lib.so,因为它是第 3 方库。

我的问题是,是否可以让 dynamic_lib.sold 本身首先搜索当前二进制文件,甚至不在 ld 的路径中搜索它,只需使用二进制的符号,或中止。

我试图找到一些关于它的相关文档,但对于像我这样的链接器菜鸟来说并不容易:-)

最佳答案

您不能将库更改为不加载 static_lib.so,但您可以欺骗它以使用 static_lib.a

默认情况下 ld 不会从可执行文件中导出任何符号,但您可以通过 -rdynamic 更改它。此选项非常粗糙,因为它导出所有静态符号,因此对于更细粒度的控制,您可以使用 -Wl,--dynamic-list(请参阅 Clang sources 中的示例使用)。

关于linux - 加载共享库时,它是否可能引用当前二进制文件中的某些内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38707958/

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