【问题标题】:This application failed to start because it could not find or load the Qt platform plugin "windows" error message此应用程序无法启动,因为它无法找到或加载 Qt 平台插件“windows”错误消息
【发布时间】:2014-08-27 15:21:47
【问题描述】:

我通过在windows 7 32bit 上使用Qt v5.3.1MinGW v4.8.2 创建了一个应用程序。
打开我的应用程序时出现以下错误:

我已使用 windeployqt.exe 工具包含所有重要文件以运行我的应用程序。

platforms 文件夹还包含:

我还包含了所有重要文件以手动运行我的应用程序而不使用windeployqt.exe 工具,但问题仍然存在。

我不知道如何解决这个问题。


编辑

使用Dependency Walker 工具的结果。

我仍然不知道如何获取这些 dll 文件question mark

【问题讨论】:

  • Qt 的 Windows 支持依赖于许多 DLL。不幸的是,我不记得我在哪里找到了这份清单。使用 Dependency Walker 查看 DLL 依赖项或使用 Process Monitor 查看哪些加载请求失败可能会有所帮助。
  • 本指南非常适合详细说明部署问题:tripleboot.org/?p=138。我第二次使用 Dependency Walker,甚至更好的 Process Explorer (technet.microsoft.com/en-us/sysinternals/bb896653.aspx)
  • @JoshKelley:我已经使用了Dependency Walker 工具,请再次查看我的问题。 @AndrewDolby:请再次查看我的问题。
  • 自从 qt5 以来,Qt 的一些核心功能被移动到插件 Dll 中,这些插件 Dll 通过 dlopen/dlsym 或 LoadLibrary 调用动态加载,具体取决于系统,这就是为什么你看不到其中的一堆依赖步行者。在这种情况下,您缺少 qt 安装位置的 plugins/platform 文件夹中的 windows dll,可能还有一些其他的,具体取决于您需要的类
  • Process Explorer 或 ListDlls(两个 Sysinterals 实用程序)将允许您在开发环境中查看应用程序中加载的缺失插件 dll。然后,您可以根据您正在部署的内容检查这些内容。奇怪的是它找不到 qwindows.dll,因为您将它放在正确的位置。您可以尝试使用 qt.conf 更改插件位置。本指南详细介绍了该过程:Deploying a real Qt app。此外,部署不需要 Dependency Walker 视图中的 IESHIMS.dll 和 WER.dll。

标签: c++ qt qt5 platform


【解决方案1】:

首先,感谢大家对问题的理解和解决方法的贡献。

现在,要解决这个问题,您必须准确阅读这篇文章,以便首先了解问题所在,然后再了解如何解决。 [Deploying a real Qt app – understanding more of Qt]

结论简而言之:
问题的原因是the path of the plugins that you used in your project.
您在项目中使用的插件的默认路径是qt path folder,但是当您的机器上没有安装qt开发环境时,您的应用程序将无法运行,因为默认的path to plugins指向qt path folder,这是问题。
我们需要将插件路径定向/更改到您的应用程序文件夹。

有几种方法可以直接/更改路径。我会提到我已经尝试并成功解决问题的方式

有一个名为addLibraryPath(const QString & path)的静态方法,这个方法我们将使用它来指导/改变the plugins path

示例:

int main(int argc, char *argv[])
{
    QApplication::addLibraryPath("pluginsFolder");
    QApplication a(argc, argv);
    Widget w;
    w.show();


    return a.exec();
}

pluginsFolder 是包含您在项目中使用的所有插件的文件夹。

你也可以改

QApplication::addLibraryPath("pluginsFolder");

QApplication::addLibraryPath(".");

这意味着主应用程序文件夹中的插件不在名为plugins的子目录中。
并且不要忘记使用windeployqt.exe 工具来部署您的项目。

最后,我希望这个简短的解释对我之后面临同样问题的人有用。

【讨论】:

  • 您使用的是“pluginsFolder”还是“plugins”?在 pluginsfolder 里面你有例如“platforms, sqldrivers,...” 文件夹`?
  • @user1767754: pluginsFolder 表示文件夹名称,其中收集了其中的所有插件(sqldrivers、平台等),位于您的应用程序文件夹中。
  • QApplication::addLibraryPath("E:/plugins/");即使我在此文件夹中有平台,sqldrivers 也没有帮助
  • 在 QApplication 对象之前添加QApplication::addLibraryPath("E:/plugins")。例如:QApplication::addLibraryPath("E:/plugins"); QApplication a(argc, argv);
【解决方案2】:

尝试使用 QtApplication.exe 将 libEGL.dll、libGLESv2.dll 和 D3DCompiler_43.dll 添加到目录级别。 qwindows.dll 很可能将它们作为依赖项,因此您会遇到静默失败。如果它们位于 Qt-Dir/bin 中,您可以判断是否需要它们。如果做不到这一点,在 Dependency Walker 中打开 qwindows.dll 可能有助于显示缺少的依赖项。

【讨论】:

  • 你说的我都应用了,但是还是出现错误信息。
猜你喜欢
  • 2014-04-11
  • 2016-06-10
  • 2014-10-01
  • 2015-06-06
  • 2017-07-24
  • 2020-04-13
  • 1970-01-01
  • 2019-07-26
  • 1970-01-01
相关资源
最近更新 更多