什么是“.text 符号 `._XXXXXXXXX 的无法识别的存储类 111”?

Posted

技术标签:

【中文标题】什么是“.text 符号 `._XXXXXXXXX 的无法识别的存储类 111”?【英文标题】:What means "Unrecognized storage class 111 for .text symbol `._XXXXXXXXX"? 【发布时间】:2011-10-20 19:39:04 【问题描述】:

在尝试对在 AIX 5.3 上编译的可执行文件或共享库进行 objdump 时,我多次收到此错误消息。对于这台机器上的任何其他可执行文件,它都可以正常工作。 这个可执行文件也会在运行时崩溃(在字符串赋值时)。

我不确定这是否重要,但在链接过程中我很少收到警告,例如: ld:0711-224 警告:重复符号:非虚拟 thunk 到 XYZ::~XYZ() 整个可执行文件是直接从 .o 文件构建的(和一个外部库,但我确信它没问题)。

有些东西告诉我它可以连接到弱符号,但我不知道如何解决这个问题。 知道可能出了什么问题或我可以检查什么以继续此操作吗?

我还尝试将所有 cpp 文件包含在一个大文件中,然后编译它。我仍然遇到分段错误,但在其他地方(现在在 g_strXXXXX.erase() - 擦除全局字符串)。 部分堆栈跟踪如下所示:

(...)

.#3 0x101d8534 in __static_initialization_and_destruction_0(int, int) (__initialize_p=1, __priority=65535) at ../../licserver/someclass1.cpp:4

.#4 0x101d8df0 in GLOBAL_I_fc_softc () at ../../shared/someclass1.cpp:225

.#5 0x103c81fc in GLOBAL_FI_licserver_unittest ()

.#6 0xd03aadb0 in mod_init1 () from /usr/lib/libc.a(shr.o)

.#7 0xd03aacc4 in __modinit () from /usr/lib/libc.a(shr.o)

.#8 0x100001d4 in __start() (gdb) 全球_I_fc_softc

所以看起来 libc 或 libstdc++ 有问题?

【问题讨论】:

几乎可以肯定你的代码有问题。但是,如果您不打算发布您的代码,则很难提供帮助。鉴于堆栈跟踪,它可能与初始化全局变量的顺序有关,但真的很难说。贴出代码! 不幸的是,我无法发布代码,原因有两个:它是封闭源代码,大约有 300MB ;) 但我可以说它在所有 Windows、Linux、HP_UX、MacOS 和FreeBSD,所以我不认为这是代码问题。而是 AIX 链接器什么的…… 你在不同的源文件中定义了全局变量吗?这些将使用不同的链接器以不同的顺序初始化。这是从一个平台迁移到另一个平台时常见的错误来源。 是的,代码周围很少有全局变量和单例。实际上,这段代码之前在 AIX 上运行,但在构建系统发生一些更改后停止(以前所有文件都包含在一个 cpp 文件中,现在一切都使用正确的通配符完成,因此包含文件的顺序和数量都可能改变)。您能否提供一些由于错误的初始化顺序而可能失败的代码示例?我可以想象,只有一个变量需要第二个来初始化(而第二个还没有初始化)。有没有办法调试这类问题? comp.lang.c++ 常见问题解答对此有很好的部分,请参阅从问题 10.14 开始的parashift.com/c++-faq-lite/ctors.html。您可能不得不弄脏自己的手并弄乱代码才能确定这一点,但是如果您移动东西并且突然代码开始或停止工作而没有明显的原因,那么这个问题很可能是问题所在。不确定您的平台,但调试器应该会有所帮助,因为所有这些事情都发生在 main 执行之前,并不意味着您不能以正常方式设置断点等。 【参考方案1】:

你真的是对的,约翰,非常感谢! 我的代码存在“静态初始化订单惨败”问题。 用函数调用替换所有可疑的全局对象后,问题似乎解决了。

所以我改变了:

CFoo g_F;

进入:

CFoo& GetF() 
  static CFoo F;
  return F;

现在很好。对于这部分代码,我不需要多线程支持,否则我猜我会使用单例(代码太多,无法摆脱全局变量)。

【讨论】:

以上是关于什么是“.text 符号 `._XXXXXXXXX 的无法识别的存储类 111”?的主要内容,如果未能解决你的问题,请参考以下文章

什么是PP,PE.什么是均聚..什么是共聚..什么是嵌段..什么是无规,什么是注塑。什么是吹膜..什

时间是什么?时间同步是什么?GPS北斗卫星授时又是什么?

什么是拉电流,什么是灌电流?什么是吸收电流 ?

在java中,OOA是什么?OOD是什么?OOP是什么?

什么是DIV,全称是什么?

什么是抢占/什么是可抢占内核?到底有什么好处呢?