我正在寻找一种最直接的方法来构建基于MinGW的64位Qt程序(当然我不是唯一的)。直接前进意味着最少的努力和时间(例如,建造和设置)。目前,我使用MinGW/OpenGL和QtCreator运行qt-project.org Windows 32位网站的正常官方开发环境。当然,我读过qt-project.org的64位wiki页面,也读过不同的堆栈溢出问题,但我还是很困惑。我知道如何构建64位Qt的主题在其他文章中得到了处理,但这不是我的问题,我需要的是一个概述和最有利的64位MinGW端口。
例如,让我感到困惑的一点是,来自mingwbuilds项目的"x64-Qt-5.2.1+QTCreator-3.0.1-(gcc-4.8.2-seh).7z“包中的DLL似乎是32位的。
为了澄清我的问题,我还要问一些有关的问题:
非常感谢你的帮助。
发布于 2014-08-25 23:59:02
更新3/11/2019:从QT5.12开始,Qt项目正式支持64位模式下的MinGW-w64。您可以从Qt安装程序安装它,也可以自己从Qt的源代码构建它(它们解决了阻碍成功构建的问题)。
先验更新:,我认为rubenvb的回答现在是这个问题的最佳答案: MSYS2包含一个最新的Qt,它是用MinGW-w64构建的,这就是构建64位Qt应用程序所需要的。我建议在rubenvb的部署答案中使用Qt链接;它得到了很大的改进。
NG 64-NG
我建议从NG 64-NG项目安装Qt构建。
该项目提供了一个最新的,x64 Qt构建与MinGW-w64.MinGW-w64项目的GCC编译器也包含在安装程序版本中(但没有包含在7z中)。您可能希望使用MinGW-w64中的GCC版本来构建自己的应用程序所用的Qt,所以我建议您选择安装程序。
您将需要选择一个带有异常堆栈框架展开方法的生成。问题sjlj和侏儒对seh的区别是什么?描述了不同Qt构建中存在的异常处理程序类型之间的差异。在GCC 4.8发行之前,SJLJ是唯一的选择,但GCC版本支持SEH。这两种选择都会奏效,尽管SEH更有效率。
后装
安装Qt之后,您可以将qt/qt/qt/bin和qt/qt/MinGW 64/bin目录添加到您的环境变量中的用户或系统路径变量中,这将允许您使用MinGW-W64的GCC从您喜欢的构建过程进行构建。Qt Creator将自动检测MinGW-w64作为安装后的编译器。
如果您不想添加到您的路径中,您可以手动为您刚刚为Qt设置的版本指定编译器。您可能需要通过在Options > Build & Run下面选择qmake.exe来添加Qt版本。您还需要在Build & Run > debugger选项卡下选择gdb.exe作为调试器。它将位于qt/qt/qt/mingw64 64/bin。
您可以将MinGW-w64工具链与其他工具链交换。要在中这样做,您可以在工具包之间创建和交换。
部署
您可以使用Qt64-NG构建来进行开发和部署。要进行部署,您需要打包应用程序运行所需的文件,这样最终用户就不必执行任何额外的安装步骤。
首先,创建一个部署文件夹(可能带有您的应用程序名称)并将您的应用程序exe文件复制到它。如果使用Qt,则可以在侧栏的Projects选项卡或应用程序的.pro文件中找到应用程序exe的路径(如果指定的话)。
有两种方法可以复制运行应用程序所需的dll依赖项。您可以手动复制所需的文件,也可以使用windeployqt,这是一个与Qt安装一起提供的程序,它将自动将部署所需的(大多数)依赖项复制到您刚刚创建的应用程序部署文件夹中。
手动复制文件
将以下dll文件从qt/qt/qt/bin和qt/qt/mingw64 64/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/qt/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
/deploy/platforms
qwindows.dll
/deploy/plugins/imageformats
qjpeg.dll
温多里克特
您可以在qt/ folder /folder/bin文件夹中找到windeployqt.exe。Windeployqt要求您的qt/qt/qt/bin和mingw64 64/bin文件夹在用户或系统路径变量中才能正常工作。
若要使用windeployqt,请打开命令窗口并切换到您的应用程序部署目录。运行它的语法可以在Qt部署上找到。您可能希望按以下方式运行它:
windeployqt.exe app.exe
Windeployqt (QT5.4.1)将把图像格式和图标引擎插件文件夹复制到应用程序部署目录级别,而不是在plugins文件夹中。这是正确的位置,因为它改变了Qt查找这些文件夹的位置。
故障排除
您可以通过在没有安装Qt开发库的计算机上并在路径上运行应用程序来测试是否有正确的文件。如果在应用程序启动时没有错误,那么您将知道Qt找到了它所需的依赖项,并且可以打包应用程序以供分发。
如果您收到错误,请参考Tripleboot部署指南。您还可以尝试使用过程资源管理器查看应用程序在出现依赖项缺失错误时试图加载的依赖项。
包装
应用程序通常是与存档和/或安装程序一起分发的。Qt安装程序框架为将Qt应用程序打包为安装程序可执行文件提供了一种方便的方法。
发布于 2015-11-30 14:36:08
您可以安装MSYS2,它包括包管理器和包加载的预建版本,包括Qt,您也可以在MSYS2环境之外使用Qt (顺便说一下,Qt也在存储库中)。
安装很容易:
<msys2>/mingw{64,32}/bin
中,可以从相应的命令提示符中访问。同样,您也可以安装开发所需的数百个其他库和工具。
至于应用程序部署的其余部分,请参阅Windows部署上的Qt项目wiki页面。
https://stackoverflow.com/questions/25402225
复制相似问题