在Windows上部署的Qt 5应用在Windows上部署的Qt 5应用(Deploying Qt

2019-05-09 02:15发布

我已经写了几个应用程序在QML(Qt的5部分)。 在我之前(做了一个问题https://softwareengineering.stackexchange.com/questions/213698/deploying-qt-based-app-on-mac-os-x ),我找到了解决方案上部署我的应用程序OS X(使用macdeployqt工具)。

在Windows上部署应用程序的Qt4很容易:

  1. 您在释放模式编译它。
  2. 复制必要的库(DLL)。
  3. 你测试,它的工作。

不幸的是,这种方法并没有QT5工作(我甚至包括在qwindows.dll文件夹的平台,并没有奏效)。 经过努力些日子,我放弃了,编译QT5的静态版本。

再次,它没有工作。 该应用支持Qt安装在PC上,但它崩溃的“干净”的电脑。 作为一个侧面说明,于Windows 8 / 8.1系统不给予警告或消息通知我关于应用程序的崩溃。 但是,在Windows 7的消息通知我的应用程序崩溃。

我试着运行的Dependency Walker(Depends.exe分析)和我的应用程序的静态编译所有的库看起来很好。

在Windows 8中,我没有得到任何错误。 但在剖析中的Depends.exe应用后,我得到一个访问冲突从QtGui.dll始发。 确切的错误是

第二次机会异常0000005(访问冲突)在“QT5GUI.DLL”发生在地址0x61C2C000。

有什么事,我很想念(说一个额外的DLL或配置文件)?

应用信息:

  • 书面和使用Qt 5.2.1编译
  • 使用快速/ QML。
  • 使用网络模块。
  • 使用WebKit模块。
  • 使用蓝牙模块。
  • 该QML文件都写在快速2.2

Answer 1:

从Qt的5.2开始,有windeployqt工具,你可以使用。 刚刚从命令行中运行它来获得帮助。 但是,基本用法是,给它的.exe文件,它会复制Qt的依赖性去用它。

您将要使用--qmldir选项,让工具知道你的QML文件,因此它可以计算出所需要的QML依赖。

注意有关测试:确保你所拥有的一切,测试在计算机,没有的Qt SDK,或者暂时命名 Qt的目录。 否则,应用程序可能从那里找到丢失的文件...



Answer 2:

几个小时在Qt的论坛挖后,我发现我需要在“QML”文件夹(通常位于C:/Qt/5.2.1/qml)复制到应用程序的根目录。 这样做之后,我的两个应用程序的动态和静态版本制作香草系统。


程序目录(MinGW的4.8 32位,动态):

正如海德说,使用windeployqt工具( <qt path>\<version>\bin\windeployqt.exe )到nescesary文件复制到你的应用程序的文件夹中。 在此之后,从复制所需的QML组件<qt path>\<version>\qml\到应用程序的文件夹中。 生成的文件夹应类似于:

  • 平台(文件夹)
  • QtQuick(文件夹)
  • QtQuick.2(文件夹)
  • 你需要的任何其它QML组件
  • APP.EXE
  • icudt51.dll
  • icuin51.dll
  • icuuc51.dll
  • libgcc_s_dw2-1.dll
  • 的libstdc ++ - 6.dll
  • libwindthread-1.DLL
  • Qt5Core.dll
  • Qt5Gui.dll
  • Qt5Qml.dll
  • Qt5Quick.dll
  • Qt5Network.dll
  • Qt5Widgets.dll

项目目录(静态)

静态编译应用程序,则所需的QML组件从复制<qt path>\<version>\qml\到应用程序的文件夹中。 生成的文件夹应类似于:

  • QtQuick(文件夹)
  • QtQuick.2(文件夹)
  • 你需要的任何其它QML组件
  • APP.EXE

我认为,坠机原因是,Qt5Gui.dll(动态和静态)“试图”加载QtQuick *在运行时文件夹,但无法找到他们(从而压坏载荷时的应用程序)。



文章来源: Deploying Qt 5 App on Windows