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

21

我正在寻找(而且我相信不只是我一个人)在Windows上构建基于MinGW的64位Qt程序最简单的方法。直截了当意味着最小的工作量和时间(例如,用于构建和设置)。目前,我在Windows 32位上使用MinGW / OpenGL和QtCreator的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位可执行文件,或者我可以保留我的普通默认环境并仅使用64位工具链替换MinGW工具链?
  • 我在哪里可以获取用于部署的64位Qt库,还是我无论如何都需要自己构建它们?或者我在哪里可以获取包括64位库的64位开发环境?
  • 如果我必须自己构建,那么哪个MinGW 64位端口最受欢迎?

非常感谢您的帮助。


http://qt-project.org/wiki/MinGW-64-bit - 有何用途? - Steadi
2个回答

21

更新于2019年3月11日:从Qt 5.12开始,Qt项目正式支持64位模式下的MinGW-w64。您可以从Qt安装程序中安装它,或者从Qt的源代码构建自己的版本(他们已解决了导致构建失败的问题)。

之前的更新:我认为rubenvb的答案现在是这个问题的最佳答案:MSYS2包含了使用MinGW-w64构建的最新版Qt,这也是您构建64位Qt应用程序所需的内容。我推荐使用rubenvb答案中的Qt wiki链接进行部署;它已经得到了极大的改善。

Qt64-NG

我建议您通过Qt64-NG项目安装Qt构建版本。

该项目提供了一个带有MinGW-w64的最新的x64 Qt构建版本。在安装程序版本中还包括了MinGW-w64项目的GCC编译器(但不在7z中)。您需要选择与用于构建Qt的GCC相同版本的MinGW-w64以构建自己的应用程序,因此我建议选择安装程序。

您将需要选择所需异常堆栈帧展开方法的构建版本。问题“sjlj vs dwarf vs seh”有什么区别?描述了不同Qt构建版本中存在的异常处理程序类型之间的差异。在GCC 4.8发布之前,只有SJLJ是唯一的选择,但是后来的GCC版本支持SEH。任何一种选择都可以使用,但SEH更加高效。

安装后

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

如果您不想添加到路径中,您可以手动为刚刚设置的版本指定编译器,然后通过Qt Creator使用它。您可能需要在“选项 > 构建 & 运行”下选择qmake.exe来添加Qt版本。您还需要在“构建 & 运行 > 调试器”选项卡下选择gdb.exe作为调试器。它位于Qt/qt-ver/qt-ver/mingw64/bin中。

您可以将MinGW-w64工具链与其他工具链进行交换。在Qt Creator中,您可以创建并在各个工具包之间进行切换。

部署

您可以使用Qt64-NG构建版本进行开发和部署。为了部署应用程序,您需要将应用程序运行所需的文件打包到应用程序中,这样您的最终用户就不需要进行任何额外的安装步骤。

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

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

手动复制文件

从您的 Qt/qt-ver/qt-ver/bin 和 Qt/qt-ver/mingw64/bin 文件夹中将以下 dll 文件复制到应用程序部署文件夹中。某些 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会默认在应用程序部署文件夹/plugins中查找插件。你可以在Qt/qt-ver/qt-ver/plugins中找到要复制的插件文件夹。例外情况是平台文件夹,Qt将尝试在应用程序部署目录/platforms中找到它。以下目录结构指示了最小项目的文件复制位置。将任何其他所需的插件以及包含文件夹复制到部署/plugins文件夹中。

/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

/部署/平台

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

Windeployqt

您可以在Qt/qt-ver/qt-ver/bin文件夹中找到windeployqt.exe。为了使Windeployqt正常工作,需要将Qt/qt-ver/qt-ver/bin和mingw64/bin文件夹添加到您的用户或系统Path变量中。

要使用windeployqt,请打开命令窗口并切换到应用程序部署目录。有关运行它的语法,请参见Qt Deployment。您可能希望按以下方式运行它:

windeployqt.exe app.exe

Windeployqt (Qt 5.4.1) 将会把你的 imageformats 和 iconengines 插件文件夹复制到你的应用程序部署目录层而不是插件文件夹内部。这是正确的位置,因为它改变了 Qt 寻找这些文件夹的位置。

故障排除

你可以在没有安装 Qt 开发库并在路径中的计算机上运行你的应用程序,以测试你是否拥有正确的文件。如果你在应用程序启动时没有收到错误提示,那么你就知道 Qt 找到了它所需要的依赖项,然后你可以打包你的应用程序以供发布。

如果你遇到错误,请参考 Tripleboot 部署指南。您还可以尝试使用 Process Explorer 查看应用程序在出现缺少依赖项错误时尝试加载的依赖项。

打包

经常情况下,应用程序将会通过压缩文件和/或安装程序进行分发。 Qt Installer Framework 提供了一种方便的方式,将你的 Qt 应用程序打包成一个可执行的安装程序以供发布。


感谢您提供的有用答案,它非常接近我所需要的。我下载了"qt-5.3.1-x64-mingw482r4-sjlj.exe"并成功构建了我的参考程序。然而,我无法从QtCreator运行它。当我尝试运行独立的发布版本时,我发现缺少带有qwindows.dll的平台目录。不幸的是,我找不到它... - Chris
qwindows.dll 应该位于 qt-ver/plugins/platforms 目录下。然而,您的部署目录结构可能略有不同。您需要在部署目录中创建 platforms 和 plugins 文件夹。platforms 文件夹将包含 qwindows.dll,而 plugins 文件夹将包含所需插件的子文件夹,您可以从 qt-ver/plugins 目录中复制这些插件。 - Andrew Dolby
谢谢,不过我已经知道如何部署了,因为我已经成功地为标准的MinGW 32位Qt完成了这个任务。看起来在“qt-5.3.1-x64-mingw482r4-sjlj.exe”中缺少插件/平台目录。 - Chris
很奇怪,我刚刚运行了安装程序,并将插件/平台/qwindows.dll复制到正确的位置。可能是您的安装由于某种原因没有复制这些文件。您应该能够从Qt-x64的“qt-5.3.1-x64-mingw482r4-sjlj.7z”下载中获取qwindows.dll和任何其他缺少的dll。我检查过,qwindows.dll在7z存档中。我还为您方便地托管了它。http://www.andrewdolby.com/downloads/qwindows.7z - Andrew Dolby
2
很遗憾,该项目不再活跃。 - lightning_missile
该项目已更名/移动到不同的位置:http://sourceforge.net/projects/qt64ng/. 我会在答案中编辑链接。 - Andrew Dolby

16
你可以安装MSYS2,其中包括一个软件包管理器和一堆预构建的软件包版本,包括Qt,您还可以在MSYS2环境之外使用它,例如Qt Creator(顺便说一下,它也在存储库中)。
安装很容易:
1. 从网页下载安装程序。 2. 打开MSYS2命令提示符并安装Qt: pacman -Sy mingw-w64-{i686,x86_64}-qt5 3. Qt的qmake安装在/mingw{64,32}/bin中,并可从各自的命令提示符中访问。
同样,您可以安装数百个其他库和工具,以供开发使用。
至于应用程序部署的其余部分,请参阅Qt项目Windows部署维基页面

如果您选择使用MSYS2,您可以忽略Qt本身提供的Qt在线/离线安装程序-并获得许多额外的库,这些库可能会很有用,特别是如果您正在为多个操作系统编写应用程序,如Linux。如果您熟悉\ * nix OS中安装的文件系统,比如说C:\ msys64,那么这将是非常容易识别的...-感谢@rubenvb在开发一种使FOSS项目能够在Windows上运行的系统方面所做的所有工作... - SlySven

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接