我已经下载了 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++ 编译并运行该控制台应用程序没有任何问题。
但是我不能run一个 Qt 应用程序。我使用 Qt Creator,使用 Creator 的“Qt Gui Application”模板创建了一个虚拟 Qt 应用程序。该项目可以成功编译,没有任何错误或警告。但是当我尝试运行时,二进制文件不断崩溃(都来自Qt Creator
and Windows Explorer
) 它。调试和发布版本都会崩溃。它甚至在显示主窗口之前就崩溃了。
MingW 安装在C:\MingW
and C:\MingW\bin
is in PATH
。 Qt 安装在C:\Qt\4.8.2
and C:\Qt\4.8.2\bin
is in 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
那么,是什么导致了运行时崩溃呢?
EDIT
我还尝试了 Qt 的示例项目:2dpainting 和地址簿 - 启动时都崩溃了。
您应该使用用于构建应用程序的 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.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 位发行版不需要此补丁)。
patch qmake\Makefile.win32-g++
and qmake\Makefile.win32-g++-sh
删除-static-libstdc++
GCC 无法识别的选项(现在会出错而不是忽略)
-
patch mkspecs/win32-g++/qmake.conf
移动-Wl,
in the 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
copy make.exe
to mingw32-make.exe
在 MinGW 的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
这需要一段时间......希望没有其他需要修补。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)