Nach dem Kompilieren von C++ Datei (mit der globalen statischen Objekt) I in nm
Ausgabe erhalten diese Funktion:g ++ __static_initialization_and_destruction_0 (int, int) - was ist das
00000000 t _Z41__static_initialization_and_destruction_0ii
__static_initialization_and_destruction_0(int, int) /* after c++filt */
Was ist das? Es ruft __cxa_atexit()
Kann ich Generation dieser Funktion zu deaktivieren (und __cxa_atexit()
Aufruf) und setzen alle und Destruktor Anrufe .ctors
und .dtors
Abschnitte?
g ++ hat eine Befehlszeilenoption "-fno-use-cxa-atexit", aber ich denke nicht, dass das helfen wird. Es sieht so aus, als ob es bewirkt, dass 'atexit()' anstelle von 'cxa_atexit()' verwendet wird. Vielleicht ist die bessere Frage, warum g ++ '_static_initialization_and_destruction_0()' erzeugt, um damit zu beginnen, anstatt Konstruktor- und Destruktoraufrufe in den ELF-Abschnitten '.ctors' und' .dtors zu plazieren. Vermutlich gibt es einen guten Grund dafür. – Void