c++ - 在 Windows 上部署 Qt 5 应用程序

标签 c++ windows deployment qt

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

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

  1. 您在 Release模式下编译它。
  2. 您复制了必要的库 (DLL)。
  3. 您进行了测试,并且成功了。

不幸的是,这种方法在 Qt5 中不起作用(我什至在 qwindows.dll 文件中包含了平台文件夹,但它不起作用)。经过几天的尝试,我放弃并编译了Qt5的静态版本。

再次,它没有工作。该应用程序可以在安装了 Qt 的 PC 上运行,但在“干净”的 PC 上会崩溃。附带说明一下,Windows 8/8.1 系统不会发出警告或消息通知我有关应用程序崩溃的信息。但在 Windows 7 中,一条消息通知我应用程序崩溃了。

我已尝试运行 Dependency Walker (depends.exe),我的应用程序静态构建中的所有库似乎都很好。

在 Windows 8 中,我没有收到任何错误。但是在对depends.exe 中的应用程序进行分析后,我收到了源自QtGui.dll 的访问冲突。确切的错误是

Second chance exception 0xC0000005 (Access Violation) occurred in "QT5GUI.DLL" at address 0x61C2C000.

我是否缺少某些东西(比如额外的 DLL 或配置文件)?

申请信息:

  • 使用 Qt 5.2.1 编写和编译
  • 使用 Quick/QML。
  • 使用网络模块。
  • 使用 webkit 模块。
  • 使用蓝牙模块。
  • QML 文件是用 Quick 2.2 编写的

最佳答案

从 Qt 5.2 开始,您可以使用 windeployqt 工具。只需从命令行运行它即可获得帮助。但基本用法是,给它.exe文件,它会复制Qt依赖项。

您将需要使用 --qmldir 选项让该工具知道您的 QML 文件在哪里,以便它可以找出所需的 QML 依赖项。

关于测试的注意事项:为确保您拥有一切,请在没有 Qt SDK 的计算机上进行测试,或者暂时重命名 Qt 目录。否则应用程序可能会从那里找到丢失的文件...

关于c++ - 在 Windows 上部署 Qt 5 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22185974/

相关文章:

windows - 如何在 Windows 10 中查看 llvm 版本号

windows - PowerShell WindowStyle -Hidden 适用于 Windows 10,但不适用于 Windows 7

C++:在初始化程序中类静态变量的定义中查找名称

C++ 抽象一个模板化类型,保留 T(虚拟)

c++ - Arduino PinChangeInt.h 产生编译器错误

python - 没有名为 '_pywrap_tensorflow' 的模块

grails - 如何在已部署的 Grails 2.1.0 应用程序中包含 Groovy 2.0?

spring-boot - Spring Boot App 在 docker 上消耗过多内存

javascript - 如何部署从命令行运行的 Javascript 应用程序?

c++ - 使用 Nsight 确定银行冲突和合并