我已经写了几个应用程序在QML(Qt的5部分)。 在我之前(做了一个问题https://softwareengineering.stackexchange.com/questions/213698/deploying-qt-based-app-on-mac-os-x ),我找到了解决方案上部署我的应用程序OS X(使用macdeployqt工具)。
在Windows上部署应用程序的Qt4很容易:
- 您在释放模式编译它。
- 复制必要的库(DLL)。
- 你测试,它的工作。
不幸的是,这种方法并没有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
从Qt的5.2开始,有windeployqt
工具,你可以使用。 刚刚从命令行中运行它来获得帮助。 但是,基本用法是,给它的.exe文件,它会复制Qt的依赖性去用它。
您将要使用--qmldir
选项,让工具知道你的QML文件,因此它可以计算出所需要的QML依赖。
注意有关测试:确保你所拥有的一切,测试在计算机,没有的Qt SDK,或者暂时命名 Qt的目录。 否则,应用程序可能从那里找到丢失的文件...
几个小时在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 *在运行时文件夹,但无法找到他们(从而压坏载荷时的应用程序)。