__do_global_ctors在项目中的某个地方发生了段错误,无法找到它

时间:2014-05-16 06:31:39

标签: c++ qt constructor segmentation-fault qt5

我将一个项目从Qt4迁移到Qt5,它编译并且除了应用程序之外的所有内容在它到达主函数之前崩溃。我知道有一个空值可以在某些时候弄乱某些东西,可能是一个无法找到的文件或者其他东西,但是有很多.cpps和.h以及库很难找到错误的来源加上我不能设置任何断点。我有很多调试数据,所以也许你们中的任何一个都可以指导我正确的方向。我不知道在没有堆栈溢出的情况下我会做什么,所以提前谢谢。

调试时遇到不同的崩溃: enter image description here

enter image description here enter image description here

每种情况下的堆栈显示不同的崩溃,但它们都有一些共同点,就是这个 __ do_global_ctors ,我已经研究过,显然它与构造函数有关,但我没有想法我应该寻找什么。
如果我错过了任何信息,请询问。我希望有人能够启发我,我非常接近这一点。

2 个答案:

答案 0 :(得分:1)

__do_global_ctors()之前调用main(),因为框架需要实例化main()可能使用的所有全局对象。

此方法将为所有静态对象及其组件对象调用构造函数。即所有静态构造函数。

从堆栈跟踪的外观看,似乎在构造QGlobalStatic<QMutex, [incomlpete types - see trace for details]>对象期间发生了段错误,这是有道理的。这是qRegisterResourceData qInitResources_mimetypes的一部分构建的。

尝试在qrc_mimetypes.cpp中的此函数中放置断点(如果您有源代码)并查看它的位置。或者查看有关mimetypes初始化的Qt文档,并确保已正确指定应用程序的资源。

答案 1 :(得分:0)

我设法通过仔细地将所有库重新编译到Qt5并确保程序引用的所有cpps也是Qt5来解决问题。还要仔细检查链接。我以为我做过了,但显然我错过了一个图书馆。

请注意,某些库需要迁移,还有其他库可以直接使用Qt5下载和编译。如果您遇到同样的问题,请确保在自己迁移之前没有该库的Qt5版本。