在编译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部分?
发布于 2011-03-07 12:21:41
这个文档文件似乎告诉了你所有你想知道的关于这些函数的信息:http://www.nsnam.org/docs/linker-problems.doc
据我所知,gcc为每个需要调用静态构造函数的翻译单元创建了一个__static_initialization_and_destruction_0。然后,它将__do_global_ctors_aux放入.ctors部分,然后在每个翻译单元上调用__static_initialization_and_destruction_0。
然而,问题似乎比这复杂得多;gcc必须处理归档中的单个目标文件,我认为这就是他们如何阻止链接器优化这些调用。
https://stackoverflow.com/questions/2434505
复制相似问题