Qt 4.8.2 GCC 4.7.0.1继续崩溃

时间:2012-09-12 04:25:22

标签: c++ qt

我已经下载了Qt 4.8.2库,Qt Creator 2.5.2,并使用w32api 3.13版本和GCC / g ++版本4.7.0.1手动安装了MingW。我的操作系统是Windows 7 Ultimate x64。

我可以在Qt Creator中创建一个示例“Plain C ++ project”;使用g ++编译和运行该控制台应用程序没有任何问题。

但我不能运行一个Qt应用程序。我使用了Qt Creator,使用Creator的“Qt Gui Application”模板创建了一个虚拟Qt应用程序。该项目可以成功编译,没有任何错误或警告。但是当我尝试运行时(来自Qt CreatorWindows Explorer),二进制文件不断崩溃。调试和发布都构建崩溃。它甚至在显示主窗口之前就崩溃了。

MingW安装在C:\MingWC:\MingW\bin位于PATH。 Qt安装在C:\Qt\4.8.2中,C:\Qt\4.8.2\bin位于PATH

我用Dependency Walker分析了Qt Gui应用程序输出的生成exe,发现它找到了所有必需的DLL:

  • C:\ Windows \ System32下\ KERNEL32.DLL
  • C:\ Windows \ System32下\ MSVCRT.DLL
  • C:\ MinGW的\ BIN \ LIBGCC_S_DW2-1.DLL
  • C:\ MinGW的\ BIN \的libstdc ++ - 6.DLL
  • C:\ QT \ 4.8.2 \ BIN \ QTCORE4.DLL
  • C:\ QT \ 4.8.2 \ BIN \ QTGUI4.DLL

那么,是什么导致运行时崩溃?

修改

我也尝试过Qt的示例项目:2dpainting和addressbook - 它们在启动时都崩溃了。

2 个答案:

答案 0 :(得分:4)

您应该使用您用来构建应用程序的MinGW编译器构建Qt。与MSVC相比,GCC对二进制兼容性问题的敏感度通常较低,但Qt是一个庞大而复杂的框架库。如果有任何事情会暴露这些问题,Qt可能会在短名单上。

构建Qt非常简单,但需要花费大量时间,而且我需要做两到三个补丁才能成功构建。

我最后一次使用MinGW制作Qt(4.7.3)时,我不得不制作以下补丁 - 我不确定它们是否仍适用于Qt 4.8:

  • 确保不在编译器中启用C ++ 11模式 - 有几个带有串联字符串文字的宏在新的C ++ 11扩展文字语法下中断
  • MinGW的某些发行版如何将Microsoft扩展程序合并到float.h时出现问题 - 我有时不得不添加该行:

    #include_next <float.h>
    

    到MinGW特定float.h的末尾,以便正确处理通用GCC float.h。我必须为nuwen 4.7.0 lib/gcc/i686-pc-mingw32/4.7.0/include/float.h和TDM 4.6.1 32位发行版lib/gcc/mingw32/4.6.1/include/float.h执行此操作(TDM的64位发行版不需要此补丁)。

  • 修补程序qmake\Makefile.win32-g++qmake\Makefile.win32-g++-sh删除GCC无法识别的-static-libstdc++选项(现在错误而不是忽略)

    < / LI>
  • 修补程序mkspecs/win32-g++/qmake.conf-Wl,宏中的QMAKE_LFLAGS_EXCEPTIONS_ON移至QMAKE_FLAGS中的适当位置:

    QMAKE_LFLAGS        = -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc
    QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads
    
  • make.exe复制到MinGW&#39} mingw32-make.exe目录中的bin,如果还不是mingw32-make.exe

然后构建Qt包括:

  set QTDIR=<location of Qt source directory>  # where configure.exe is
  set PATH=%QTDIR%\bin;c:\MinGW\bin;%PATH%
  set INCLUDE=
  set LIB=
  cd %QTDIR%

  mingw32-make confclean    # (this should fail the first time, since there's nothing to clean)
  configure.exe -opensource -debug-and-release -nomake examples -nomake demos -nomake tests -platform win32-g++  # and accept the GPL license
  mingw32-make

这需要一段时间......希望其他任何东西都不需要修补。

答案 1 :(得分:0)

我也遇到了这个问题。我是Qt n00b并且在安装Qt库时,“我已经安装了Mingw,所以我跳过安装Qt附带的Mingw”。这给了我一些问题。当安装Qt附带的mingw时,一切正常。

所以我向谷歌搜索这个问题的建议(就像我做的那样)是代替使用你已安装的Mingw,用Qt安装它并使用它(否则你必须在你的Mingw中构建Qt库,就像迈克尔伯尔回答)