如何在Windows上构建64位MinGW Qt应用程序(使用Qt Creator)

如何在Windows上构建64位MinGW Qt应用程序(使用Qt Creator),windows,qt,64-bit,mingw,Windows,Qt,64 Bit,Mingw,我正在寻找(当然我不是唯一一个)在Windows上构建基于MinGW的64位Qt程序的最直接的方法。直截了当意味着最少的努力和时间(例如,用于构建和设置)。目前,我使用MinGW/OpenGL和QtCreator为Windows 32位运行qt-project.org网站的正常官方开发环境。当然,我已经阅读了qt-project.org的(未完成的…)64位wiki页面,我也阅读了不同的stackoverflow问题,但我仍然感到困惑。我知道如何构建64位Qt的主题在其他文章中也有讨论,但这不是

我正在寻找(当然我不是唯一一个)在Windows上构建基于MinGW的64位Qt程序的最直接的方法。直截了当意味着最少的努力和时间(例如,用于构建和设置)。目前,我使用MinGW/OpenGL和QtCreator为Windows 32位运行qt-project.org网站的正常官方开发环境。当然,我已经阅读了qt-project.org的(未完成的…)64位wiki页面,我也阅读了不同的stackoverflow问题,但我仍然感到困惑。我知道如何构建64位Qt的主题在其他文章中也有讨论,但这不是我的问题,我需要的是一个概述和最有利的64位MinGW端口

例如,让我困惑的一件事是,mingwbuilds sourceforge项目的“x64-Qt-5.2.1+QTCreator-3.0.1-(gcc-4.8.2-seh).7z”包中的DLL似乎是32位的

为了澄清我的问题,我还想问一些相关问题:

  • 我是否需要先构建64位开发环境来生成 64位可执行文件或我可以保留我的正常默认环境和 仅将MinGW工具链与64位工具链交换
  • 哪里可以 我为部署获得64位Qt库,还是需要构建 还是我自己?或者在哪里可以获得64位开发环境 包括64位库吗
  • 如果我必须自己构建,哪一个MinGW 64位端口是最有利的

非常感谢您的帮助。

2019年11月3日更新:从Qt 5.12开始,Qt项目正式支持64位模式的MinGW-w64。您可以从Qt安装程序安装它,也可以从Qt的源代码中自己构建它(他们已经解决了阻止成功构建的问题)

之前的更新:我认为这是这个问题的最佳答案:MSYS2包含一个使用MinGW-w64构建的最新Qt,这是构建64位Qt应用程序所需的。我建议使用rubenvb答案中的QtWiki链接进行部署;它有了很大的改进

Qt64 NG 我建议从安装Qt版本

该项目使用MinGW-w64提供了最新的x64 Qt版本。MinGW-w64项目的GCC编译器也包含在安装程序版本中(但不包含在7z中)。你需要的是MinGW-w64中的GCC版本,该版本用于构建Qt以构建你自己的应用程序,因此我建议选择安装程序

您需要选择一个包含所需异常堆栈帧展开方法的生成。这个问题描述了不同版本的Qt中存在的异常处理程序类型之间的差异。在GCC4.8发布之前,SJLJ是唯一的选择,但后来的GCC版本支持SEH。尽管SEH的效率更高,但两种选择都会奏效

安装后 安装Qt后,可以将Qt/Qt-ver/Qt-ver/bin和Qt/Qt-ver/mingw64/bin目录添加到环境变量中的用户或系统路径变量中,这将允许您使用MinGW-w64的GCC从首选构建过程进行构建。完成此操作后,Qt Creator将自动将MinGW-w64检测为已安装的编译器

如果您不想添加到路径中,可以手动为刚刚使用Qt Creator设置的版本指定编译器。您可能需要在选项>生成和运行下选择qmake.exe来添加Qt版本。您还需要在Build&Run>Debuggers选项卡下选择gdb.exe作为调试器。它将位于Qt/Qt ver/Qt ver/mingw64/bin

可以将MinGW-w64工具链与其他工具链交换。要在Qt Creator中执行此操作,您可以在工具包之间创建和交换

部署 您可以使用Qt64 NG构建进行开发和部署。要部署,您需要打包应用程序运行时需要的文件,这样最终用户就不必执行任何额外的安装步骤

首先,创建一个部署文件夹(可能包含应用程序名)并将应用程序exe文件复制到其中。如果您使用的是Qt Creator,则可以在侧栏上的“项目”选项卡或应用程序的.pro文件(如果在其中指定)中找到应用程序exe的路径

有两种方法可以复制运行应用程序所需的dll依赖项。您可以手动复制所需的文件,也可以使用windeployqt,这是一个随Qt安装提供的程序,它将自动将(大多数)部署所需的依赖项复制到您刚刚创建的应用程序部署文件夹中

手动复制文件 将以下dll文件从Qt/Qt ver/Qt ver/bin和Qt/Qt ver/mingw64/bin文件夹复制到应用程序部署文件夹。某些dll文件将位于这两个文件夹中,并且任何一个位置都可以使用:

icudt54.dll
icuin54.dll
icuuc54.dll
libgcc_s_sjlj.dll or libgcc_s_seh.dll (corresponds with chosen stack unwinding method)
libssp-0.dll
libstdc++-6.dll
libwinpthread-1.dll
Qt5Core.dll
Qt5Gui.dll
Qt5Widgets.dll
您还需要包含与您在项目中使用的Qt模块相对应的任何Qt5*.dll文件

接下来,您需要复制Qt所需的任何插件dll文件。默认情况下,Qt将在applicationdeploy文件夹/插件中查找插件。您可以在Qt/Qt-ver/Qt-ver/plugins上找到要复制的插件文件夹。例外情况是平台文件夹,它将尝试在应用程序部署目录/platforms中找到该文件夹。下面的目录结构指示在何处复制最小项目的文件。将任何其他需要的插件(包括包含该插件的文件夹)复制到部署/插件文件夹中

/deploy

/platforms
/plugins
icudt54.dll
icuin54.dll
icuuc54.dll
app.exe
libgcc_s_seh-1.dll
libssp-0.dll
libstdc++-6.dll
libwinpthread-1.dll
Qt5Core.dll
Qt5Gui.dll
Qt5Widgets.dll
/deploy/platforms

qwindows.dll
qjpeg.dll
/deploy/plugins/imageformats

qwindows.dll
qjpeg.dll
Windeployqt 您可以在Qt/Qt-ver/Qt-ver/bin文件夹中找到windeployqt.exe。Windeployqt要求您的Qt/Qt ver/Qt ver/bin和mingw64/bin文件夹位于用户或系统路径变量中才能正常工作

要使用windeployqt,请打开命令窗口并更改为应用程序部署目录。运行它的语法可以在中找到。你会成功的