Qt应用程序无法运行

时间:2014-03-12 09:18:47

标签: c++ qt crash exe release

我刚刚完成了用Qt编程的应用程序。它与我的Qt Creator运行良好,但是当我从发布目录中复制带有所有必要的dll文件的.exe时。它不需要任何进一步的dll文件,但它只是崩溃。发生了什么事?

Problem signature:
Problem Event Name:       APPCRASH
Application Name:         agrisis.exe
Application Version:      0.0.0.0
Application Timestamp:    532025fe
Fault Module Name:        Qt5Cored.dll
Fault Module Version:     5.2.1.0
Fault Module Timestamp:   52ed6764
Exception Code:           c0000005
Exception Offset:         00216730
OS Version:               6.1.7601.2.1.0.256.48
Locale ID:                1033
Additional Information 1: 0a9e
Additional Information 2: 0a9e372d3b4ad19135b953a78882e789
Additional Information 3: 0a9e
Additional Information 4: 0a9e372d3b4ad19135b953a78882e789

我已将Qt5 bin目录中的所有dll文件复制到我的应用程序目录,但现在它不再在Qt5Cored.dll崩溃,它在Qt5WebKitd崩溃(应用程序屏幕显示正常但是网络组件无法显示):

Problem Event Name:       APPCRASH
Application Name:         agrisis.exe
Application Version:      0.0.0.0
Application Timestamp:    53214fe7
Fault Module Name:        Qt5WebKitd.dll
Fault Module Version:     5.2.1.0
Fault Module Timestamp:   52ed99de
Exception Code:           c0000005
Exception Offset:         01d0a465
OS Version:               6.1.7601.2.1.0.256.48
Locale ID:                1033
Additional Information 1: a7aa
Additional Information 2: a7aa91f17ea749d42a4de3b390fa5b3d
Additional Information 3: a7aa
Additional Information 4: a7aa91f17ea749d42a4de3b390fa5b3d

2 个答案:

答案 0 :(得分:2)

您可能缺少仅在运行时加载的文件(如插件DLL)。本指南将帮助您快速找到这些DLL。它假设:

  • 当您从Qt Creator
  • 构建+运行时,您的应用的发布版本可以正常工作
  • 您的(动态链接)Qt副本安装在C:\ Qt \ 5.2.1 \ mingw48_32 \

Deployment files

初始部署(快速和脏)

  1. 关闭Qt Creator。
  2. 将以下内容复制到C:\ Deployment \
  3. MyApp.exe的发布版本
  4. C:\ Qt \ 5.2.1 \ mingw48_32 \ bin \
  5. 中的所有.dll文件
  6. C:\ Qt \ 5.2.1 \ mingw48_32 \ plugins \
  7. 中的所有文件夹
  8. (如果您使用的是QML)C:\ Qt \ 5.2.1 \ mingw48_32 \ qml \
  9. 中的所有文件夹
  10. 将C:\ Qt \重命名为C:\ QtHidden。 (这会将您的PC变为干净的环境,就像没有安装Qt的环境一样。)
  11. 启动C:\ Deployment \ MyApp.exe。
  12. 如果您的应用正常工作,恭喜!您几乎已准备好进行部署。您不希望发送1.5GB软件包,因此需要清理未使用的文件。

    如果它无法正常工作,请寻求更多帮助。

    最终部署(已清理)

    在C:\ Deployment \及其所有子目录中执行以下删除步骤。每次删除后,启动C:\ Deployment \ MyApp.exe并测试它。如果它停止工作,请恢复刚刚删除的文件。

    1. 删除所有调试DLL并仅保留版本DLL。 (调试DLL以'd'结尾。例如,删除Qt5Cored.dll但保留Qt5Core.dll)
    2. 删除一些DLL并测试MyApp.exe。重复,直到您尝试所有DLL。
    3. (如果您使用的是QML)删除一些.qml文件并测试MyApp.exe。重复,直到您尝试所有.qml文件。
    4. (如果您使用的是QML)从没有DLL或.qml文件的文件夹中删除qmldir文件
    5. 删除了所有不需要的文件后,

      1. 将C:\ QtHidden \重命名为C:\ Qt \以恢复安装。
      2. 分发您的应用。

      3. 改编自: http://qt-project.org/wiki/Deploy_an_Application_on_Windows

答案 1 :(得分:1)

通常在运行.exe文件时,会显示一条消息,显示缺少的dll。但对于某些dll文件,此消息根本不显示。

我复制了Qt的所有dll文件,然后逐个删除它们。