将.a中的函数链接到.so中

发布于 2024-10-30 11:19:27 字数 545 浏览 4 评论 0原文

我写了一个共享的libA.so。我的程序P将动态加载libA.so(使用dlopen、dlsym...)。

这是我的问题:

libA.so 中,我必须在静态 libB.a 中使用函数(例如 fun1()),但是libB.a 不是用 -fPIC 编译的,我无法重新编译 libB.a,因此无法链接 libB.alibA.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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

ぺ禁宫浮华殁 2024-11-06 11:19:27

如果您想将libB.a链接到P,以便libA.so在被加载时可以使用这些函数P,需要使用-rdynamic选项编译P

If you want to link libB.a into P, so that the functions are available to libA.so when it is loaded by P, you need to compile P with the -rdynamic option.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文