【发布时间】:2011-05-25 08:53:53
【问题描述】:
我在 linux 中有一个可执行文件 - exe
这个可执行文件中有一些函数,在整个代码中都会用到:
sendMsgdebugPrint
然后我想动态加载一个.so,它为我的可执行文件提供额外的功能。
在这个共享库中,我包含了 sendMsg 和 debugPrint 的标头。
我用dlopen() 加载这个共享库并用dlsym() 创建一个API。
但是,在dlopen(),我使用RTLD_NOW 在加载时解析所有符号。
它无法找到sendMsg 符号。
这个符号必须在可执行文件中,因为sendMsg.c 在其中编译。
但是,我的可执行文件被make 进程剥离。因此,dlopen 找不到符号是有道理的。
我该如何解决这种情况?
- 我可以将共享函数构建到一个静态库中,并将该静态库链接到
exe和.so。这会增加代码大小:( - 我可以删除
exe的剥离,以便可以找到符号 - 做一些我不知道的编译时链接魔术,以便
.so知道符号在exe中的位置
【问题讨论】:
标签: linux dynamic-linking dynamic-loading