2015-10-22 61 views
1

因此,我安装了安装了Qt插件的Visual Studio 2013(社区版),Qt5库(32位),并试图创建独立于所有开发配置的可执行文件使用静态或共享库,我不在乎这一点)。在windows上部署Qt5应用程序的问题

操作系统: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)错误。

我已搜查,发现该错误代码指示下列问题之一:

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

对于检查哪些依赖我的应用程序需要,我打开.exe文件,的Dependency Walker应用程序,这是它显示我:

application dependencies

在此列表中也Qt5Multimedia.dllQt5SerialPort.dll,我通过在.exe的同一文件夹中复制.DLLs来消除错误。

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

+0

自我回答问题欢迎SO。但请分开问题和答案。您可以编辑问题,使其仅包含问题部分,并将解决方案作为答案发布。否则,这看起来像一个公开的问题,而不是解决问题。 – Bowdzone

+0

@Bowdzone完成。谢谢你注意到我。 –

回答

7

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

它负责有关Qt DLL依赖,使得platforms\qwindows.dll副本,也这让你无法与Dependency Walker中检测库的副本,因为图像的插件和其他一些在运行时加载。

你甚至不需要在你的环境中有你的Qt bin文件夹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。

+0

这有助于我的大部分库,但3D模块是一个例外吗?对我而言,'windeployqt'似乎可以复制Qt3D DLL,但是我的应用程序却缺少所有Qt3D QML模块。我想分开处理QML模块吗? – Matt

1

解决方案:

随着我更深,我发现this答案,做什么,这个问题的答案指示后(其实我复制了所有的.DLLs位于\Qt5.5.0\5.5\msvc2013\bin到我的.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.5\msvc2013\plugins路径)。复制该文件夹后,应用程序启动没有任何问题!

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

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

+1

这是唯一的解决方案,帮助...感谢:D – Shachi