What means "Unrecognized storage class 111 for .text symbol `._XXXXXXXXX"?
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 ch开发者_如何学运维eck 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++?
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).
精彩评论