c++ - 防止符号在 IBM Visual Age C/C++ for AIX 中被剥离

标签 c++ aix

我正在构建一个共享库,我使用 IBM 的 VisualAge C/C++ 编译器将其动态加载(使用 dlopen)到我的 AIX 应用程序中。不幸的是,它似乎删除了必要的符号:

rtld: 0712-002 fatal error: exiting.
rtld: 0712-001 Symbol setVersion__Q2_3CIF17VersionReporterFRCQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__ was referenced
from module ./object/AIX-6.1-ppc/plugins/plugin.so(), but a runtime definition
of the symbol was not found.

共享库和加载共享库的应用程序都针对包含错误消息中提到的 VersionReporter 的静态库进行编译/链接。

要链接共享库,我使用这些选项:-bM:SRE -bnoentry -bexpall 为了链接应用程序,我使用了这个选项:-brtl

我可以使用一个选项来防止此符号在应用程序中被删除吗?我已尝试使用 IBM 文档中所述的 -nogc,但这会导致共享库格式无效或应用程序无法链接(取决于我使用的是哪个应用程序)。

最佳答案

是的。这并没有真正连接到特定的语言或编译器。例如,相同的通用技术用于 gcc。 -bI:foo.exp 用于告诉链接器 foo.exp 中列出的符号将来自顶部的名称。同样,-BE:dog.exp 用于告诉链接器,dog.exp 中列出的符号已导出,可供其他人使用。

您可以看到/bin/ldd 和/bin/dump 可以用来查看这些符号。

关于c++ - 防止符号在 IBM Visual Age C/C++ for AIX 中被剥离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2759725/

相关文章:

C++ - 为任何 lambda 创建实例化桶

c++ - 临时对象的复制构造函数调用

c++ - #include <map> 在 AIX 4.3 上与 xlC 的可用性

bash - 通过脚本更改 AIX 密码?

c++ - 在 Makefile 中以编程方式确定库路径

c++ - boost::fusion 的编译时间与运行时间

c++ - boost 库更新后模板函数调用不起作用

java - 如何在 AIX 中将 jar 文件作为服务运行,以便在崩溃时自动重新启动?

perl - 从 Jenkin 管道运行脚本时如何通过 ssh 在远程 AIX 机器中加载环境变量?