使用MinGW 4.7.2进行Qt应用程序分段故障

oll*_*llo 4 c++ qt mingw qt4

使用MinGW 4.7.2每个编译的Qt 4应用程序崩溃 - 甚至是以前运行过的程序.

  • MinGW: 4.7.2
  • QT: 4.8.3
  • 二手Libs:
    • QtCore4.dll
    • QtCored4.dll
    • QtGui4.dll (如果gui使用)
    • QtGuid4.dll (如果gui使用)

以简单程序为例:

#include <QtGui/QApplication>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv); /* Crash here */

    return app.exec();
}
Run Code Online (Sandbox Code Playgroud)

崩溃: 收到信号:SIGSEGV(分段故障)

调用堆栈:

ZN23QCoreApplicationPrivate27processCommandLineArgumentsEv+68: mov    (%edx,%esi,1),%eax
ZN16QCoreApplication4initEv+88: lea    -0x8(%ebp),%esp
ZN16QCoreApplicationC2ER23QCoreApplicationPrivate+47: add    $0x24,%esp
ZN12QApplicationC1ERiPPci+75: movl   $0x67ef2768,(%ebx)
QApplication app(argc, argv);
[...]
Run Code Online (Sandbox Code Playgroud)

Nik*_* C. 5

你需要MinGW 4.4.要使用MinGW 4.7.2,您需要自己编译Qt.崩溃是由于MinGW版本之间的ABI不兼容.

看看如何构建Qt:

http://qt-project.org/wiki/Building_Qt_Desktop_for_Windows_with_MinGW

一般情况下,在下载Qt时,请注意它所构建的MinGW版本.如果您想使用自己的MinGW安装,则需要与构建Qt的版本相同.