有一件让我困惑的例子是,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位端口是最有利的?
非常感谢你的帮助.
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应用程序作为安装程序可执行文件分发.