gpt4 book ai didi

c - 让 AIX 在运行时加载所有共享符号?

转载 作者:行者123 更新时间:2023-11-30 17:22:58 27 4
gpt4 key购买 nike

我使用的是 AIX 5.3,使用 C 语言。

我有一个应用程序 (foo),它在运行时链接到共享库 (lib1.so),然后通过 dlopen() 动态加载另一个库 (lib2.so)。 lib2.so 使用了 lib1.so 中 foo 不使用的一些函数。当我执行该应用程序时,我收到类似于以下内容的错误:

rtld: 0712-001 Symbol someLibFunc was referenced from module
/libdir/lib2.so(), but a runtime definition of the symbol was not found.

我不认为更改 dlopen() 标志会产生任何影响,因为我的问题似乎与运行时链接发生时导入的符号有关。在构建 foo 时是否可以使用某种类型的 ld 选项来强制它导入所有共享库符号?同样的构建在我的 Linux 环境中运行良好。

最佳答案

我找到了罪魁祸首。

我在 lib1.so 上运行“dump -Tv”,发现我期望导出的函数在那里(尽管它确实出现在 nm 中,说来也怪)。该库与 -bexpall 链接,因此所有符号都应该在那里。我深入研究了 ld 手册页,发现 expall 没有导出以下划线 (_) 前缀的符号。我试图使用的函数以下划线开头。我找到了 'expfull' ld 选项,它导出以下划线前缀的符号,用该选项重建 lib1.so,现在一切都很好。

关于c - 让 AIX 在运行时加载所有共享符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27808779/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com