在 windows 上部署 Qt5 应用程序时出现问题

Problems with deploying Qt5 application on windows

所以我有 Visual Studio 2013(社区版)安装了 Qt 插件,Qt5 库(32 位),我正在尝试创建一个独立于所有开发配置的可执行文件(它可能使用静态或共享库,我现在并不关心)。

OS: Windows 7, x64.

为此,我将 Solution Confguration visual studio 选项从 Debug 更改为 Release,并在 Configuration Properties -> Linker -> Input -> Additional Dependencies 中添加了所有必需的库。该应用程序现在仅在我 运行 从视觉 IDE 启动时启动,如果我尝试从生成的 .exe 启动它,我得到 The application was unable to start correctly (0xc000007b) 错误。

我搜索过,发现此错误代码表示存在以下问题之一:

为了检查我的应用程序需要哪些依赖项,我用 Dependency Walker 应用程序打开了 .exe 文件,这是它向我显示的内容:

在此列表中还有 Qt5Multimedia.dllQt5SerialPort.dll,我通过将 .DLLs 复制到与 [=15 相同的文件夹中来消除错误=].

有什么解决办法吗?

解法:

随着我的深入,我找到了 this 答案,在按照该答案指示进行操作后(我实际上将位于 \Qt5.5.0.5\msvc2013\bin 中的所有 .DLLs 复制到我的 .exe 位于),错误消息从 The application was unable to start correctly (0xc000007b) 更改为 Application failed to start because it could not find or load the QT platform plugin “windows”

在网上搜索有关此错误的更多信息,我从 this 答案中发现您还需要 platforms 文件夹与 .exe(位于在 Qt5.5.0.5\msvc2013\plugins 路径中)。复制该文件夹后,应用程序启动没有任何问题!!!

现在我只需要从我的应用程序文件夹中删除所有不必要的 .DLLs(Dependency Walker 没有提供关于此的非常有用的信息),所有部署就完成了。

我已经在描述问题的同时解决了这个问题,所以我想我就把它放在这里,可能会帮助其他有同样问题的人。

除非标准程序完全失败,否则永远不要手动执行该操作。已经有 Qt 的标准工具 Windows deploymend windeployqt.

它会处理 Qt DLL 依赖关系,制作 platforms\qwindows.dll 的副本,还会制作你无法使用 Dependency Walker 检测到的库的副本,因为图像插件和其他一些在运行时加载。

您甚至不需要在您的环境 PATH 中拥有您的 Qt bin 文件夹。最简单的部署:

  • 将构建的 exe 二进制文件复制到新文件夹
  • 在该文件夹中打开 cmd 控制台
  • 使用其完整路径调用 windeployqt(如果它不在系统 PATH 中)并提供您的可执行文件,例如:
    c:\Qt\Qt5.5.1-vs2013-x64.5\msvc2013_64\bin\windeployqt.exe application.exe
    

因此,您在该文件夹中拥有所有需要的 Qt DLL。当然,您也可能遇到 MSVC 可再发行组件的问题,但这些组件应该单独部署并在每个系统上安装一次。

工具windeployqt有多种选择。它还可以负责 qml 相关文件的部署。

如果使用某些第 3 方库,则应手动复制它们,例如 OpenSSL。