将.a中的函数链接到.so中
我写了一个共享的libA.so。我的程序P将动态加载libA.so(使用dlopen、dlsym...)。
这是我的问题:
在 libA.so 中,我必须在静态 libB.a 中使用函数(例如 fun1()),但是libB.a 不是用 -fPIC
编译的,我无法重新编译 libB.a,因此无法链接 libB.a 到 libA.so。
我尝试将 libB.a 链接到 P (使用 -Wl,--whole-archive),以便让动态加载程序链接 fun1() 加载时进入 libA.so 。然而,这是行不通的。我非常确定 fun1() 位于 P 中(我用以下命令检查过:nm P | grep "fun1"
)。
我该怎么办?
提前致谢!
I have wrote a shared libA.so. My program P will dynamic load libA.so (uses dlopen, dlsym...).
Here's my problem:
In libA.so, I have to use functions (such as fun1()) in a static libB.a, but libB.a is not compiled with -fPIC
, and I can't recompile libB.a, so I can't link libB.a into libA.so.
I have tried link libB.a into P (with -Wl,--whole-archive), in order to let dynamic loader link fun1() into libA.so when it is loaded. However, that doesn't work. And I'm pretty sure that fun1() is in P (I checked it with: nm P | grep "fun1"
).
How can I do?
Thanks in advance!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您想将
libB.a
链接到P
,以便libA.so
在被加载时可以使用这些函数P
,需要使用-rdynamic
选项编译P
。If you want to link
libB.a
intoP
, so that the functions are available tolibA.so
when it is loaded byP
, you need to compileP
with the-rdynamic
option.