【问题标题】:How to build 64-bit MinGW Qt application on Windows (with Qt Creator)如何在 Windows 上构建 64 位 MinGW Qt 应用程序(使用 Qt Creator)
【发布时间】:2014-10-13 15:55:55
【问题描述】:

我正在寻找(当然我不是唯一一个)在 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 位可执行文件,或者我可以保持正常的默认环境吗? 只用 64 位工具链交换 MinGW 工具链?
  • 在哪里可以 我获得了 64 位 Qt 库用于部署,还是需要构建 反正他们自己?或者我在哪里可以获得64位开发环境 包括 64 位库?
  • 如果我必须自己构建,哪个 MinGW 64 位端口最有利?

非常感谢您的帮助。

【问题讨论】:

标签: windows qt 64-bit mingw


【解决方案1】:

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 应用程序以作为安装程序可执行文件分发。

【讨论】:

  • 感谢这个有用的答案,它非常接近我的需要。我下载了“qt-5.3.1-x64-mingw482r4-sjlj.exe”并设法构建了我的参考程序。但是,我无法从 QtCreator 运行它。当我尝试单独运行发布版本时,我检测到缺少 qwindows.dll 的平台目录。不幸的是,我找不到它...
  • qwindows.dll 应该位于 qt-ver/plugins/platforms。但是,您的部署目录的结构会略有不同。您将需要部署目录中的平台和插件文件夹。 platform 文件夹将包含 qwindows.dll,plugins 文件夹将包含所需插件的子文件夹,您可以从 qt-ver/plugins 目录中复制这些子文件夹。
  • 谢谢,不过,我已经知道如何部署,因为我已经成功地为标准 MinGW 32 位 Qt 完成了这项工作。 “qt-5.3.1-x64-mingw482r4-sjlj.exe”中似乎缺少 plugins/platforms 目录。
  • 这很奇怪。我刚刚运行了设置,它把 plugins/platforms/qwindows.dll 复制到了正确的位置。可能是您的安装由于某种原因没有复制这些文件。您应该能够从 Qt-x64 的“qt-5.3.1-x64-mingw482r4-sjlj.7z”下载中获取 qwindows.dll 和任何其他 dll。我检查并发现 qwindows.dll 在 7z 存档中。为了您的方便,我还托管了它。 andrewdolby.com/downloads/qwindows.7z
  • 很遗憾,该项目不再活跃
【解决方案2】:

您可以安装 MSYS2,它包括一个包管理器和预构建的包加载版本,包括 Qt,您也可以在 MSYS2 环境之外使用,例如Qt Creator(顺便说一句,它也在存储库中)。

安装简单:

  1. the web page下载安装程序。
  2. 打开 MSYS2 命令提示符并安装 Qt:

    pacman -Sy mingw-w64-{i686,x86_64}-qt5

  3. Qt 的 qmake 安装在 <msys2>/mingw{64,32}/bin 中,可从相应的命令提示符访问。

以同样的方式,您可以安装开发中可能需要的数百个其他库和工具。

至于应用部署的其余部分,我推荐你the Qt project wiki page on Windows deployment

【讨论】:

  • 如果您确实走 MSYS2 路线,您可以忽略 Qt 本身为您提供的 Qt On/Off-line 安装程序 - 并获得许多您可能想要的额外库 - 特别是如果您正在为 Linux 等多种操作系统编写应用程序。如果您熟悉安装文件系统的 *nix 操作系统,比如C:\msys64 将是相当容易识别的... - 感谢@rubenvb 为您在开发系统以在 Windows 上启用 FOSS 项目所做的所有工作。 ..
猜你喜欢
  • 2016-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-03
  • 2011-01-11
  • 2013-10-31
相关资源
最近更新 更多