在其他计算机上执行时,Qt程序崩溃

时间:2016-05-24 13:45:08

标签: c++ visual-studio qt dll deployment

我在部署Qt程序时遇到问题。这是一个跨平台的程序(Linux / Mac / Windows),当我尝试在Windows 10上部署使用Visual Studio 2015构建的Win32版本时,我遇到了一个问题。

我在生产计算机上构建和运行程序没有问题,但是当我尝试在具有类似配置的其他计算机上运行它时,它只会崩溃。

部署规范

让我更具体地说明我的部署方法和错误。

像往常一样,我已将以下dll添加到我的发布可执行文件中:

  • 平台(Qt文件夹)
  • Qt5Core.dll
  • Qt5Gui.dll
  • Qt5Widgets.dll

和Visual Studio 2015可再发行(x86)

错误消息

我获得的崩溃消息是:

Unhandled exception at 0x56E5D96A (Qt5Core.dll) in snapr_exe.exe:
0xC0000005: Access violation reading location 0x00000000.

If there is a handler for this exception, the program may be safely continued.

当我尝试使用Visual Studio 2015在目标计算机上调试程序时,我获得了以下调用堆栈:

Qt5Core.dll!56e5d96a()  Unknown
[Frames below may be incorrect and/or missing, no symbols loaded for Qt5Core.dll]   
Qt5Gui.dll!572eb949()   Unknown
snapr_exe.exe!013c4ae1()    Unknown
[External Code] 
Qt5Core.dll!56e3d964()  Unknown
Qt5Gui.dll!57269edf()   Unknown
Qt5Gui.dll!5725bdc5()   Unknown
snapr_exe.exe!013f453c()    Unknown
snapr_exe.exe!013c1305()    Unknown
[External Code] 

其他相关信息

在开发的前一步,我可以生成一个集成Qt5的可执行文件,它可以在两台计算机上运行。从那时起,我已经连接了caffe深度学习库,并且我已经高度定制了Qt5用户界面。

还有什么,我用Dependency Walker仔细检查了我包含的DLL是否真的是X86 dll。

非常感谢您对此问题的任何帮助。 提前谢谢!

1 个答案:

答案 0 :(得分:1)

platforms Qt5Core.dll Qt5Gui.dll Qt5Widgets.dll绝对不足以进行部署。 depends.exe可能会显示更多缺少直接依赖关系(由Chris提出),但Qt还会动态加载插件,而depends.exe则不会显示它们。据我记忆,至少还需要“imageformat”插件文件夹(png,jpg格式才能正常工作)。

您可以使用windeployqt命令,要么自己弄清楚自己需要什么。为此,我个人从Visual Studio运行该程序。然后,Visual Studio的“输出”窗口将列出正在加载的所有dll(在运行时作为插件动态链接或加载)。你很可能会在这里看到与你没有部署的Qt相关的那些。

  

我在生产计算机上构建和运行程序没有问题

提示:重命名在生产计算机上安装/编译Qt的文件夹并运行您的程序。它很可能会开始失败。这是因为Qt库首先在当前路径中查找插件,如果没有找到它,则从它编译的文件夹中选择它们(绝对路径保存在二进制文件中的某处)。这就是为什么它几乎总能在生产计算机上完美运行......