我在linux中有一个可执行文件-exe
这个可执行文件中有一些函数,在整个代码中都使用:
sendMsg
debugPrint
然后我想动态加载一个.so
为我的可执行文件提供额外功能的。
在这个共享库中,我包含了sendMsg
和的标题debugPrint
。
我加载这个共享库dlopen()
并使用dlsym()
.
但是,dlopen()
我使用RTLD_NOW
在加载时解析所有符号。
它未能说明它找不到sendMsg
符号。
该符号必须在可执行文件中,因为在其中sendMsg.c
编译。
但是,我的可执行文件被该make
进程剥离。因此,dlopen
找不到符号是有道理的。
我该如何解决这种情况?
- 我可以将共享函数构建到一个静态库中,并将该静态库链接
exe
到.so
. 这会增加代码大小:( - 我可以删除剥离的
exe
所以可以找到符号 - 做一些我不知道的编译时链接魔术,以便
.so
知道符号在哪里exe