【发布时间】:2011-05-26 08:18:39
【问题描述】:
我有一个加载 .so 插件的可执行文件。
可执行文件与-rdynamic 链接,以便可以发生符号回调。
我有一个包含在可执行文件中的静态库。这在.a 中有一个名为BLAH_hello() 的函数
静态库未在可执行文件中使用。即在可执行代码中没有对BLAH_hello() 的调用。
但是,.so 确实可以调用 BLAH_hello()。
当我dlopen() .so 它向BLAH_hello() 抱怨一个未定义的符号
如果我在可执行代码中包含了对BLAH_hello() 的虚拟调用,例如BLAH_hello(NULL);。该符号包含在可执行文件中,当加载 .so 时,它会找到该符号。
我确定我也可以将.so 与.a 链接起来,但是多个动态加载的.so 使用BLAH_hello 调用,因此将它放在可执行文件中是有意义的。如果我将库链接到每个.so,我也会担心符号冲突。
所以我想知道的是,如何将.a 的符号放入可执行文件中,即使它们实际上并没有在可执行文件中使用?
【问题讨论】:
-
将 .so 与 .a 链接起来是显而易见且正确的做法。
-
谢谢尼尔。我有三个
.so插件需要链接到.a当我将所有.so加载到我的可执行文件中时我不会有符号冲突? -
不,你不会,否则你将无法在.sos中使用操作系统和其他标准功能。
-
好点,谢谢尼尔。
标签: dynamic-linking dynamic-loading