在Windows上部署Qt5应用程序的问题

时间:2015-10-22 08:42:39

标签: qt visual-studio-2013 dll deployment dependencies

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

操作系统:Windows 7,x64。

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

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

  • 32位应用程序尝试加载64位DLL(我认为不是我的情况,Qt DLL是32位(我使用此.exe安装:qt-opensource-windows-x86-msvc2013-5.5.0。),我使用其他一些.DLL这也是32位)。
  • 有一些丢失的DLL。 (我确实将所有必要的Qt DLL复制到最终可执行文件的同一个文件夹中。)

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

application dependencies

此列表中的

也是Qt5Multimedia.dllQt5SerialPort.dll,我通过将.DLLs复制到.exe的同一文件夹中来消除错误。< / em>的

任何想法如何解决这个问题?

2 个答案:

答案 0 :(得分:8)

除非标准程序完全失败,否则不应手动执行该操作。已经有Qt Windows部署的标准工具windeployqt

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

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

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

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

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

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

答案 1 :(得分:2)

<强>解决方案:

当我深入了解之后,我发现了this回答,在做了回答后指示的内容(我实际上将位于.DLLs的所有\Qt5.5.0\5.5\msvc2013\bin复制到我{{1}的文件夹中已找到},错误消息已从.exe更改为The application was unable to start correctly (0xc000007b)

在网上搜索有关此错误的更多信息,我在this回答中发现您还需要Application failed to start because it could not find or load the QT platform plugin “windows”位于同一位置的platforms文件夹(位于.exe {1}}路径)。复制该文件夹后,应用程序启动没有任何问题!!!

现在我只需要从我的应用程序文件夹中删除所有不必要的Qt5.5.0\5.5\msvc2013\plugins(Dependency Walker不提供有关此内容的非常有用的信息),并且所有部署都已完成。

我在描述问题的同时解决了这个问题,所以我想我会把它留在这里,可以帮助那些有同样问题的人。