在Windows上部署Qt 5应用程序
Deploying Qt 5 App on Windows
我在QML中编写了几个应用程序(Qt5的一部分)。在我之前提出的一个问题中(https://softwareengineering.stackexchange.com/questions/213698/deploying-qt-based-app-on-mac-os-x),我找到了在OS X上部署应用程序的解决方案(使用macdeployqt工具)。
在Windows上部署Qt4应用程序很容易:
- 您在发布模式下编译了它
- 您复制了必要的库(DLL)
- 你测试了一下,结果成功了
不幸的是,这种方法在Qt5中不起作用(我甚至在qwindows.dll文件中包含了platforms文件夹,但它不起作用)。经过几天的尝试,我放弃了,编译了Qt5的静态版本。
同样,它没有起作用。该应用程序在安装了Qt的电脑上运行,但在"干净"的电脑上会崩溃。顺便说一句,Windows 8/8.1系统不会发出警告或消息通知我该应用程序崩溃。但在Windows7中,一条消息通知我应用程序崩溃了。
我试过运行DependencyWalker(dependent.exe),我的应用程序的静态构建中的所有库似乎都很好。
在Windows8中,我没有收到任何错误。但是在dependens.exe中分析该应用程序后,我收到了来自QtGui.dll的访问违规。确切的错误是
在地址0x61C2C000的"QT5GUI.DLL"中发生第二次机会异常0xC0000005(访问违规)。
是否缺少某些东西(比如一个额外的DLL或配置文件)?
应用信息:
- 使用Qt 5.2.1编写和编译
- 使用Quick/QML
- 使用网络模块
- 使用webkit模块
- 使用蓝牙模块
- QML文件是用Quick 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位,动态):
正如hyde所说,使用windeployqt
工具(<qt path><version>binwindeployqt.exe
)将必要的文件复制到应用程序的文件夹中。之后,将所需的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
- Qt5Guid.dll
- Qt5Qml.dll
- Qt5Quick.dll
- Qt5Network.dll
- Qt5Widgets.dll
程序目录(静态)
静态编译应用程序,然后将所需的QML组件从<qt path><version>qml
复制到应用程序的文件夹中。生成的文件夹应类似于:
- QtQuick(文件夹)
- QtQuick.2(文件夹)
- 您需要的任何其他QML组件
- app.exe
我认为崩溃的原因是Qt5Gui.dll
(动态和静态)在运行时"尝试"加载QtQuick*文件夹,但找不到它们(因此在加载过程中导致应用程序崩溃)。
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 如何在qt中同步应用程序和显示器的刷新率?
- "string.h"在构建适用于iOS的qt应用程序中找不到消息
- Qt QML桌面应用程序自动化测试
- Qt creator 4.11,在应用程序输出面板中创建一个链接
- 使用 Bazel 编译 QT 应用程序时访问资源
- 将 Crashpad 与 Windows Qt 应用程序集成
- 在Visual Studio中单实例Qt应用程序版本5.11.1中,在所有其他窗口的顶部打开Qt MainWindow
- 在 Ubuntu 服务器上运行 QT 应用程序时崩溃
- 如何在Android设备上解析Qt应用程序的ClassNotFoundEception?
- Qt应用程序找不到第三方DLL并崩溃
- 在 Linux 上部署 Qt 应用程序
- 为什么Qt Creator的应用程序输出不能从spdlog记录器打印
- QT 样式表主题,适用于使用属性选择器的整个应用程序
- 构建一个真正、完全静态的Qt 5框架和应用程序(Qt 5.8之后)
- 无法从对话框中关闭应用程序(Qt 应用程序)
- 将Poco C++库包含到Mac OS X上的Qt Quick应用程序(Qt Creator)中
- 独立应用程序Qt
- 打开文件时基于 Qt 的应用程序'Qt platform plugin windows not found'问题
- 我的应用程序"Qt"在我的计算机中运行,但在我朋友的计算机上无法运行