Después de compilar de archivo C++ (con objeto estático global) me meto en nm
salida de esta función:g ++ __static_initialization_and_destruction_0 (int, int) - ¿qué es lo
00000000 t _Z41__static_initialization_and_destruction_0ii
__static_initialization_and_destruction_0(int, int) /* after c++filt */
¿Qué es? Se llamará __cxa_atexit()
¿Puedo desactivar la generación de esta función (y llamar a un __cxa_atexit()
) y poner todas las llamadas de constructor y el destructor de .ctors
y .dtors
secciones?
g ++ tiene una opción de línea de comando '-fno-use-cxa-atexit', pero no creo que eso ayude. Parece que solo hace que se use 'atexit()' en lugar de 'cxa_atexit()'. Quizás la mejor pregunta es por qué g ++ genera '__static_initialization_and_destruction_0()' para empezar, en lugar de colocar llamadas de constructor y destructor en las secciones ELF '.ctors' y' .dtors'. Presumiblemente hay una buena razón para eso. – Void