我在部署Qt程序时遇到问题。这是一个跨平台的程序(Linux / Mac / Windows),当我尝试在Windows 10上部署使用Visual Studio 2015构建的Win32版本时,我遇到了一个问题。
我在生产计算机上构建和运行程序没有问题,但是当我尝试在具有类似配置的其他计算机上运行它时,它只会崩溃。
让我更具体地说明我的部署方法和错误。
像往常一样,我已将以下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。
非常感谢您对此问题的任何帮助。 提前谢谢!
答案 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库首先在当前路径中查找插件,如果没有找到它,则从它编译的文件夹中选择它们(绝对路径保存在二进制文件中的某处)。这就是为什么它几乎总能在生产计算机上完美运行......