【问题标题】:QT missing dll after deploy部署后 QT 缺少 dll
【发布时间】:2014-06-10 17:22:02
【问题描述】:

我已经从QT 复制了所有需要的 dll,并且我的应用程序在我的 Windows 服务器计算机上运行良好。

但是,当尝试在 Windows 7 机器上运行它时,我收到以下消息:

此应用程序无法启动,因为它无法找到或加载他 Qt 平台插件“windows”。

重新安装应用程序可能会解决此问题。

任何想法我在这里缺少什么?

【问题讨论】:

  • 您可以使用工具获取该信息。例如,Dependency Walker (dependencywalker.com) 会告诉您缺少哪个组件。我怀疑,您缺少应用程序链接到的一些 Windows 运行时库。
  • 也许这些:#include <windows.h> #include <shellapi.h> ?
  • @Alosyius,这些不是 dll,而是引用 Windows 库的头文件。您需要知道部署系统上缺少哪个库。您可以使用建议的工具来做到这一点。
  • 我错过了/platforms/qwindows.dll 感谢您的帮助!!

标签: c++ qt


【解决方案1】:

广泛使用的解决方案是将所有必要的库放在应用程序的文件夹中。
图书馆应用程序需要什么?
运行应用程序并查看错误消息:

The program can't start because <Library name> is missing from your computer.  
Try reinstalling the program to fix this problem

库集依赖于 Qt 版本。运行多次应用程序,每次复制所需的库,您都会找到应用程序所需的内容。
就我而言(Qt 5.2.1)有

icudt51.dll, 
icuin51.dll, 
icuuc51.dll, 
libgcc_s_dw2-1.dll, 
libstdc++-6.dll, 
libwinpthread-1.dll, 
Qt5Core.dll, 
Qt5Gui.dll, 
Qt5Widgets.dll.

您可以在 Qt 安装文件夹中找到所有库。但是不要使用Tools\QtCreator 文件夹中的库,因为QtCreator 有这些库的另一个版本!

如果出现错误:
此应用程序无法启动,因为它无法找到或加载他的 Qt 平台插件windows。重新安装应用程序可能会解决此问题。
您应该创建文件夹 platforms 并将 qwindows.dll 复制到其中。
如果您仍然遇到错误,您应该在应用程序的文件夹中创建 qt.conf 文件,其内容为:

[Paths]
Plugins=plugins

https://qt-project.org/forums/viewthread/37265 中描述了此解决方案 有关qt.conf 的更多信息,请访问http://qt-project.org/doc/qt-5/qt-conf.html

在最新版本的 Qt 中,您可以找到部署工具(从 5.2 开始)。该工具为应用程序找到必要的库并复制到应用程序文件夹中。你可以像这样运行它:

call c:\Qt\QtX.Y.Z\X.Y.Z\mingw48_32\bin\qtenv2.bat
cd /d "c:\path\to\your\application\folder"
windeployqt.exe your_application.exe

通常它运作良好。但是我注意到有些库没有被复制,但是你可以通过文章开头描述的方法找到。您可以在以下位置找到更多有用的信息 http://qt-project.org/doc/qt-5/windows-deployment.html

在极少数情况下,如果某些库丢失但未出现在上面的错误消息中,您可能会收到此错误。示例:Qt 5.1.1: Application failed to start because platform plugin "windows" is missing
我没有遇到这种情况,所以我不能说更多。

【讨论】:

  • 问题在于错误信息具有误导性,至少可以这么说。它告诉您有关平台库的信息,实际上缺少的是libEGL.dll
  • 在你的情况下 - 是的。在我的实践中,我没有遇到这个原因。 Alosyius 还写道:“我错过了 /platforms/qwindows.dll”
  • 新的 Depends 应用程序可能会在这些情况下有所帮助:github.com/lucasg/Dependencies
【解决方案2】:

前段时间我曾为此挠头。事实证明,这不是因为缺少qwindows.dll,而是libEGL.dlllibGLESv2.dll 之一。这很棘手,因为依赖遍历器不会将这些库显示为直接依赖。

如果您想在您的开发机器上测试您的应用是否具有所有必需的库,请将控制台问题 SET PATH=cd 发送到您的应用目录并运行它。

这是我的应用程序正在使用的 dll 的完整列表(仅限 Qt 5.2 / QtQuick 应用程序,其余为 C++)。 QtQuick 不错,但是 Qt 依赖的大小有点吓人:

icu*.dll - 取决于你是否使用 ICU 编译 libEGL.dll libGLESv2.dll Qt5Core.dll Qt5Gui.dll Qt5Network.dll Qt5Qml.dll Qt5Quick.dll Qt5Widgets.dll

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-13
    • 2019-02-04
    • 2015-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多