2019 年 3 月 11 日更新:从 Qt 5.12 开始,Qt 项目正式支持 64 位模式的 MinGW-w64。您可以从 Qt 安装程序安装它,也可以从 Qt 的源代码自己构建它(他们已经解决了阻碍成功构建的问题)。
之前的更新:我认为rubenvb's answer 现在是这个问题的最佳答案:MSYS2 包含使用 MinGW-w64 构建的最新 Qt,这是您需要的构建 64 位 Qt 应用程序。我建议在 rubenvb 的部署答案中使用 Qt wiki 链接;大大改进了。
Qt64-NG
我建议从Qt64-NG project 安装您的 Qt 版本。
该项目使用 MinGW-w64 提供最新的 x64 Qt 构建。 MinGW-w64 项目的 GCC 编译器也包含在安装程序版本中(但不包含在 7z 中)。您需要在 MinGW-w64 中使用与构建 Qt 来构建您自己的应用程序相同的 GCC 版本,因此我建议您选择安装程序。
您将需要选择具有所需的异常堆栈帧展开方法的构建。问题What is difference between 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 将自动检测 MinGW-w64 作为已安装的编译器。
如果您不想添加到您的路径,您可以手动为您刚刚使用 Qt Creator 设置的版本指定编译器。您可能需要通过在 Options > Build & Run 下选择 qmake.exe 添加 Qt 版本。您还需要在 Build & Run > Debuggers 选项卡下选择 gdb.exe 作为调试器。它将位于 Qt/qt-ver/qt-ver/mingw64/bin。
您可以将 MinGW-w64 工具链与其他工具链交换。要在 Qt Creator 中执行此操作,您可以创建套件并在套件之间进行交换。
部署
您可以使用 Qt64-NG 构建进行开发和部署。要进行部署,您需要打包应用程序运行所需的文件,这样您的最终用户就不必执行任何额外的安装步骤。
首先,创建一个部署文件夹(可能包含您的应用程序名称)并将您的应用程序 exe 文件复制到其中。如果您使用的是 Qt Creator,您可以在侧栏的“项目”选项卡中找到应用程序 exe 的路径,或者在应用程序的 .pro 文件中(如果在此处指定)。
有两种方法可以复制运行应用程序所需的 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 会在应用程序部署文件夹/插件中查找插件。您可以在 Qt/qt-ver/qt-ver/plugins 中找到要复制的插件文件夹。例外情况是平台文件夹,它将尝试在您的应用程序部署目录/平台中找到该文件夹。以下目录结构指示将文件复制到最小项目的位置。将任何其他需要的插件(包括包含文件夹)复制到您的部署/插件文件夹。
/部署
/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
/deploy/plugins/imageformats
qjpeg.dll
Windeployqt
您可以在 Qt/qt-ver/qt-ver/bin 文件夹中找到 windeployqt.exe。 Windeployqt 要求您的 Qt/qt-ver/qt-ver/bin 和 mingw64/bin 文件夹位于您的用户或系统路径变量中才能正常工作。
要使用 windeployqt,请打开命令窗口并切换到您的应用程序部署目录。运行它的语法可以在Qt Deployment 找到。您可能希望按如下方式运行它:
windeployqt.exe app.exe
Windeployqt (Qt 5.4.1) 会将您的 imageformats 和 iconengines 插件文件夹复制到您的应用程序部署目录级别,而不是在插件文件夹中。这是正确的位置,因为它改变了 Qt 查找这些文件夹的位置。
疑难解答
您可以通过在未安装 Qt 开发库且路径中未安装 Qt 开发库的计算机上运行您的应用程序来测试您是否拥有正确的文件。如果您的应用程序启动时没有出现错误,您将知道 Qt 找到了它需要的依赖项,您可以打包您的应用程序以进行分发。
如果您遇到错误,请参阅Tripleboot deployment guide。您也可以尝试使用Process Explorer 查看您的应用程序在出现依赖项缺失错误时尝试加载哪些依赖项。
包装
应用程序通常随存档和/或安装程序一起分发。 Qt Installer Framework 提供了一种方便的方式来打包您的 Qt 应用程序以作为安装程序可执行文件分发。