微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我正在寻找(并且我不是唯一的)最直接的方法来构建基于Windows的64位Qt程序的MinGW.直线前进意味着最小的努力和时间(例如建立和设置).目前,我运行的是qt-project.org网站正常的官方开发环境,用于Windows 32位的MinGW / OpenGL和QtCreator.当然,我已经阅读了qt-project.org的64位维基页面(未完成…),我也读过不同的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位端口是最有利的?

非常感谢你的帮助.

我认为 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中使用相同版本的GCC,用于构建Qt以构建自己的应用程序,因此我建议选择安装程序.

您将需要选择一个使用您想要的异常堆栈框架展开方法的构建.问题What is difference between sjlj vs dwarf vs seh?描述了存在于不同版本的Qt中的异常处理程序的类型之间的差异. SJLJ是GCC 4.8发布之前的唯一选择,但后来的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版本.构建&跑.您还需要选择gdb.exe作为您的调试器在Build&运行>调试器选项卡.它将位于Qt / qt-ver / qt-ver / mingw64 / bin.

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

部署

您可以使用Qt64-NG版本进行开发和部署.要部署,您需要打包您的应用程序需要运行的文件与您的应用程序,所以您的最终用户不必执行任何额外的安装步骤.

首先,创建一个部署文件夹(可能使用您的应用程序名称)并将其应用程序exe文件复制到该文件夹​​.如果您使用Qt Creator,您可以在侧栏的“项目”选项卡中或应用程序的.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将在应用程序部署文件夹/插件认寻找插件.您可以在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

/部署/平台

qwindows.dll

/部署/插件/ 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找到所需的依赖关系,您可以打包应用程序进行分发.

如果您收到错误,请参阅Tripleboot deployment guide.您也可以尝试使用Process Explorer查看应用程序尝试在依赖关系丢失错误时加载的依赖关系.

打包

通常,应用程序与归档和/或安装程序一起分发. Qt Installer Framework提供了一个方便的方法来打包您的Qt应用程序作为安装程序可执行文件分发.

原文地址:https://www.jb51.cc/windows/371553.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐