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

发布于 2024-11-28 00:05:33 字数 973 浏览 3 评论 0原文

当尝试对 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 中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

​__modinit () 中的 0xd03aacc4 来自 /usr/lib/libc.a(shr.o)

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

看来 libc 或 libstdc++ 有问题?

I get this error message many times when trying to do objdump of my executable or shared library compiled on AIX 5.3. For any other executable on this machine it works fine.
This executable also crashes at runtime (at string assignment).

I'm not sure if it matters, but during the linking I have few warnings like:
ld: 0711-224 WARNING: Duplicate symbol: non-virtual thunk to XYZ::~XYZ()
Whole executable is build directly from .o files (and one external library, but I'm sure it's fine).

Something tells me that it can be connected to weak symbols, but I have no idea how to solve that problem.
Any idea what could be wrong or what more I can check to proceed with this?

I also tried to include all cpp files in one big file and then compile this. I still get segmentation fault but in other place (now in g_strXXXXX.erase() - erasing of global string).
Part of stack trace looks like this:

(...)

.#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) GLOBAL_I_fc_softc

So looks like some problem with libc or libstdc++?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(1

执笏见 2024-12-05 00:05:33

你实际上是对的,约翰,非常感谢!
我的代码存在“静态初始化顺序失败”问题。
用函数调用替换所有可疑的全局对象后,问题似乎得到了解决。

所以我把: 改成

CFoo g_F;

:

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

现在就可以了。对于这部分代码,我不需要多线程支持,否则我猜我会使用单例(代码太多,无法删除全局变量)。

You were actually right john, thanks a lot!
There was a "static initialization order fiasco" problem with my code.
After replacing all suspicious global objects with function calls problem seems to be solved.

So I changed:

CFoo g_F;

into:

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

And it's fine now. For this part of code I didn't need multithreading support, otherwise I would use singleton I guess (too much code to just rid of that global variables).

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