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

标签 linux gcc linker shared-libraries ld

假设我有一个二进制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/

相关文章:

linux - Linux 中如何判断文件类型?

linux - 外部服务登录链接 asp core

c++ - Cuda - 体系结构 x86_64 OS X 的 undefined symbol

c++ - FFmpeg libswresample 链接器错误

c - 用重复数据初始化 C 数组

c++ - Mac OSX 上的 Clang 链接错误

linux - 在 bash 脚本中终止进程

c - gcc (x64) 如何处理可变参数函数中的类型/大小?

python - cx_Freeze 构建错误

c - Linux C套接字