【问题标题】:Qt5 Static Build yields Failed to load platform plugin "windows"Qt5静态构建产生无法加载平台插件“windows”
【发布时间】:2013-05-22 08:18:52
【问题描述】:

我正在使用 Visual Studio 2012 在 Windows 上编写 Qt 应用程序。 使用 Qt 插件和 Qt 5.0.2 的自定义构建 static 发行版。 每当我运行应用程序时,我都会遇到可怕的"Failed to load platform plugin windows" 错误。 我在链接器输入中添加了以下内容:

imm32.lib
winmm.lib
Ws2_32.lib
qtmaind.lib
Qt5Cored.lib
Qt5Guid.lib
Qt5Widgetsd.lib

起初我想也许我也应该将“qwindowsd.lib”添加到该列表中,但这并没有解决问题。为了使我的应用程序运行,我需要做什么?

【问题讨论】:

  • 使用windeployQt

标签: c++ windows visual-studio qt qt5


【解决方案1】:

仅适用于动态构建:确保将 qwindows.dll 移至以下目录:

yourapp.exe
Qt5Core.dll
...
platforms/qwindows.dll
...

注意插件目录不见了!您将 QT_BASE/.../plugins/* 中所有需要的文件夹与您的二进制文件直接放在一起。 顺便说一句:我不需要 libEGL.dll,但我的应用程序几乎没有 GUI。

我的来源:http://qt-project.org/forums/viewthread/27056/#122588

【讨论】:

  • 也为我工作。很高兴知道如何让这个部署步骤在 CMake > 3 中工作。
  • 谢谢,我只是错误地复制了 dll。我需要复制文件夹结构...
  • 只有这个答案对我有用,添加一个文件夹:platforms/qwindows.dll,它包含这个.dll;那么qt应用一切正常。
  • 有没有办法切断这个“平台集成”功能? QT4 不需要它。为什么在 QT5 中是强制性的?
【解决方案2】:

我解决了。感谢this 我能够让一切正常工作。我添加了以下库:

opengl32.lib
Qt5PlatformSupport.lib
qwindows.lib

我还在我的代码中添加了以下内容:

#include <QtPlugin>
Q_IMPORT_PLUGIN (QWindowsIntegrationPlugin);

【讨论】:

  • 你是如何链接 qwindows.lib 的。正常的添加LIBS += qwindows.lib的路由没找到。
  • 也无法在任何地方找到 qwindows.lib
  • @PsychoDad 只有在您构建了静态 Qt 库时才可用。使用从 Qt 网站下载的正常构建,您只需将 qwindows.dll(或 qwindowsd.dll)共享库放在您构建的可执行文件旁边的 platforms 子文件夹中。手动创建此子目录。同样,根据您的程序,您可能需要来自图像格式等的其他插件。
  • @chappjc 你的修复对我有用。我觉得很奇怪,丢失的 DLL 没有通过依赖项步行器之类的东西被检测或追踪。我发现同样奇怪的是,通过根据项目添加如此多不同的 DLL 文件来解决相同的错误消息。无论如何,感谢你们俩对我的问题的回答。我想接下来的事情是弄清楚如何更容易地追踪这个问题,或者至少让 Qt 所有者解决并修复这个问题。
  • @soulsabr 我同意 Dependency Walker 无法识别这一点很奇怪。
【解决方案3】:

我在使用 MinGW 版本的 Qt(非静态)时遇到了同样的错误:“无法加载平台插件窗口”。

我的解决方案是添加 DLL libEGL.dll 和 libEGLd.dll。

【讨论】:

【解决方案4】:

你也可以创建一个环境变量:

QT_QPA_PLATFORM_PLUGIN_PATH=&lt;QT_BASE&gt;\plugins\platforms

在我的情况下变成: QT_QPA_PLATFORM_PLUGIN_PATH=f:\Qt\5\5.4\msvc2013_opengl\plugins\platforms

从而避免在开发过程中安装/复制qwindows.dll(以节省磁盘空间!?)。

on GitHub 和 here 也提到了这个解决方案。

编辑:抱歉,这在静态构建中无效。但我会把我的A留在这里。

【讨论】:

  • 非常喜欢提供非侵入性的答案。
  • +1。在我的情况下export QT_QPA_PLATFORM_PLUGIN_PATH=&lt;top qt directory&gt;/5.9.8/gcc_64/plugins/,所以上一级就足够了。请注意,我发现此解决方案也适用于 Linux 环境
  • +1。了解平台数据的位置进一步加深了我对可以运行 WebGL 的理解。
【解决方案5】:

好的,我有类似的问题。

我发现QT 5.2+有windeployq.exe

QT_DIRECTORY\5.2...\bin\windeployq.exe

将它与您的项目目录(应用程序的 .exe 所在的位置)一起使用。瞧!自动链接一切并准备部署!

它将自动获取 DLL、插件等...!

【讨论】:

【解决方案6】:

另一种方法是将qtbase/plugins/platforms 目录复制到Debug/Release 目录中,只留下qwindowsd.dll 或qwindows.dll(视情况而定)。

【讨论】:

  • 这是一个静态构建。没有 DLL,只有一个 exe 文件。
  • 啊,我明白了。希望这对使用 dll 的其他人有用。
  • 是的,你几乎是对的,但正如阿德勒所说,你必须将“QtBase\plugins\platforms”中的“qwindowsd.dll”放到“platforms\qwindowsd.dll”文件夹中。不要忘记相对路径!
【解决方案7】:

从 QT 5.9+ 开始 Qt5PlatformSupport.lib 不再可用,并且已将 split 放入不同的库中。 要在 Windows 下创建静态构建,需要链接以下附加库:

Qt5FontDatabaseSupport.lib
Qt5EventDispatcherSupport.lib
Qt5ThemeSupport.lib
Qt5PlatformCompositorSupport.lib
Qt5AccessibilitySupport.lib
Qt5WindowsUiAutomationSupport.lib
qwindows.lib

并加载windows插件statically:

#include <QtPlugin>
Q_IMPORT_PLUGIN (QWindowsIntegrationPlugin);

【讨论】:

    【解决方案8】:

    解决方案是,如果您使用 anaconda 和 python 使用 qt 设计器制作 gui,然后转到 anaconda,pkgs,qt.xxx,library,plugins ,然后将平台文件夹复制到包含您的程序的构建文件夹中。执行

    【讨论】:

      【解决方案9】:

      我正是这个问题。解决方案是在 Debug 输出中检查 Qt。该窗口会告诉您它加载的所有 DLL。这些是您在分发 exe 文件夹中可能需要的。

      【讨论】:

      • 这是一个静态构建。没有 DLL,只有一个 exe 文件。
      【解决方案10】:

      VS2015 和 Qt 5.9.3 版本出现同样的错误

      我通过在 Qt 目录中用相同的 DLL 替换 Qt5Cored.dll 和 Qt5Core.dll(我的应用程序的 exe)解决了这个错误

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-15
        • 2013-02-04
        • 2013-06-26
        • 1970-01-01
        • 2017-03-01
        • 2014-01-04
        • 1970-01-01
        相关资源
        最近更新 更多