2

我已经下载了 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++ 项目”;使用 g++ 编译和运行该控制台应用程序没有任何问题。

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

MingWC:\MingW安装C:\MingW\binPATH. C:\Qt\4.8.2Qt安装C:\Qt\4.8.2\binPATH.

我使用 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 和地址簿——它们在启动时都崩溃了。

4

2 回答 2

4

您应该使用用于构建应用程序的 MinGW 编译器构建 Qt。GCC 通常对二进制兼容性问题没有 MSVC 敏感,但 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以便通用 GCCfloat.h得到正确处理。我必须为 nuwen 4.7.0lib/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删除-static-libstdc++GCC 无法识别的选项(现在错误而不是忽略)

  • 补丁将宏中的mkspecs/win32-g++/qmake.conf移动到适当的位置:-Wl,QMAKE_LFLAGS_EXCEPTIONS_ONQMAKE_FLAGS

    QMAKE_LFLAGS        = -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc
    QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads
    
  • 如果还没有,则复制make.exemingw32-make.exeMinGW 的目录中binmingw32-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

这需要一段时间......希望没有其他需要修补。

于 2012-09-12T08:13:51.357 回答
0

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

所以我对任何在谷歌上搜索这个问题的人的建议(就像我一样)是不要使用你已经安装的 Mingw,而是使用 Qt 安装一个并使用它(否则你必须在你的 Mingw 中构建 Qt 库,就像 Michael 的回答一样毛刺)

于 2013-02-11T13:37:46.960 回答