在编译带有全局静态对象的c++文件后,我在 nm
输出中得到以下函数:
00000000 t _Z41__static_initialization_and_destruction_0ii
__static_initialization_and_destruction_0(int, int) /* after c++filt */
这是什么?它将调用__cxa_atexit()
我能否禁用生成此函数(以及调用__cxa_atexit()
),并将所有构造函数和析构函数调用放入.ctors
和.dtors
部分中?
-fno-use-cxa-atexit
命令行选项,但我认为那并没有帮助。看起来它只是导致使用atexit()
而不是cxa_atexit()
。也许更好的问题是为什么g++生成__static_initialization_and_destruction_0()
,而不是将构造函数和析构函数调用放在.ctors
和.dtors
ELF部分中。这样做肯定有充分的理由。 - Void