c++ - __do_global_ctors segfault en algún lugar del proyecto, no puedo ubicarlo
qt constructor (2)
Migré un proyecto de Qt4 a Qt5 y compila y todo, excepto la aplicación falla antes de que llegue a la función principal. Sé que hay un valor nulo que arruina algo en algún momento, tal vez un archivo que no puede encontrar o algo así, pero hay tantos archivos .cpps y .h y bibliotecas que es bastante difícil localizar el origen del error y no puedo establecer cualquier punto de interrupción Tengo una gran cantidad de datos de depuración, así que tal vez cualquiera de ustedes pueda orientarme en la dirección correcta. No sé lo que haría sin desbordar la pila honestamente, así que gracias de antemano.
Al depurar, tengo diferentes fallas:
La pila en cada caso muestra diferentes bloqueos, pero todos tienen algo en común, que es esta cosa __do_global_ctors , he investigado y aparentemente tiene que ver con constructores, pero no tengo idea de lo que debería estar buscando.
si me perdí alguna información por favor pregunte. Espero que alguien pueda iluminarme, estoy tan cerca de hacer que esto funcione.
Se __do_global_ctors()
antes de su main()
, ya que el framework necesita crear una instancia de todos los objetos globales que main()
podría usar.
Este método llamará a los constructores para todos los objetos estáticos y sus objetos componentes. Es decir, todos los constructores estáticos.
A partir de la apariencia de la traza de la pila, parece que la segfault ocurre durante la construcción de un objeto QGlobalStatic<QMutex, [incomlpete types - see trace for details]>
, que tiene sentido. Esto está siendo construido por qRegisterResourceData
como parte de qInitResources_mimetypes
.
Intente ubicar un punto de interrupción en esta función en qrc_mimetypes.cpp (si tiene la fuente) y vea a dónde lo lleva. O mire la documentación de Qt para la inicialización de los tipos de mimet y asegúrese de haber especificado los recursos de su aplicación correctamente.
Me las arreglé para resolver el problema mediante la compilación cuidadosa de todas las bibliotecas a Qt5 y asegurándome de que todos los cpps que el programa refirió fueran Qt5 también. También verificó dos veces los enlaces. Pensé que lo había hecho, pero aparentemente me perdí una biblioteca.
Tenga en cuenta que algunas bibliotecas deben migrarse y hay otras que puede descargar y compilar directamente con Qt5. Si tiene este mismo problema, asegúrese de que no haya versiones Qt5 de esa biblioteca antes de migrarlas usted mismo.