说我有一个二进制server
,当它被编译时,它从server.c
,static_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
,因为它是第三方库。
我的问题是,是否有可能让dynamic_lib.so
或ld
本身首先搜索当前二进制文件,或者甚至不在ld的路径中搜索它,只使用二进制符号或中止。< / p>
我试图找到一些关于它的相关文档,但是关于像我这样的连接器的新手并不容易: - )
答案 0 :(得分:0)
您不能将库更改为不加载static_lib.so
,但可以欺骗它使用 static_lib.a
。
默认情况下,ld
不会从可执行文件中导出任何符号,但是您可以通过-rdynamic
进行更改。该选项非常粗略,因为它会导出所有静态符号,因此对于更细粒度的控制,您可以使用-Wl,--dynamic-list
(请参见Clang sources中的示例使用)。