【问题标题】:(Qt 5.7.0) Could not find or load the qt platform plugin "windows"(Qt 5.7.0) 无法找到或加载 qt 平台插件“windows”
【发布时间】:2016-11-16 12:34:03
【问题描述】:

请记住,所有这些都与 Qt Creator(5.6.1 和 5.7)

我在我的工作机器上做了一个项目(Win7,64 位,在 Qt 5.6.1 中使用 MinGW 5.3.0 32 位编译)。它在调试和发布模式下都能完美运行。

不久之后,我决定在另一台机器(WinXp,32 位)上测试我的程序。我刚刚传递了可执行文件和.dll。仍然像魅力一样工作。

后来,我在我的游戏机(Win10,64 位)上测试了我的程序的相同版本。奇怪的是,它根本不起作用。我收到以下错误:


“无法找到或加载 qt 平台插件“windows””。


我记得如果缺少 .dll,就会发生此错误。所以我将所有 .dll 从 Qt 文件夹传递到我的程序文件夹(意图删除不需要的后者)。令我惊讶的是,它仍然没有工作。但错误是不同的:


“找不到或加载 qt 平台插件“windows”...可用的平台插件有:minimal、offscreen、windows、minimal、offscreen、windows。”


它非常清楚地找到了平台插件窗口(qwindows 或 qwindowsd... 或两者兼而有之),但无法加载它。任何想法为什么?


编辑:C:\Qt\5.7\mingw53_32\bin 中的所有 .dll 都已复制并粘贴到可执行文件所在的文件夹中。

C:\Qt\5.7\mingw53_32\plugins 中的所有文件夹都被复制并粘贴到可执行文件所在的文件夹中。

这几乎就是我添加的所有 .dll!

【问题讨论】:

  • 由于您从未解释过从何处复制 DLL,因此我假设您在这些 DLL 或其依赖项之一中存在位不匹配。
  • @IInspectable 我在问题中添加了一些信息。谢谢你叫出来!
  • 不要复制所有可以找到的 dll,只需将 .exe 放在一个空文件夹中并打开 Qt5.* 命令行。然后运行:windeployqt yourfile.exe。这将从 Qt 发行版中复制所需的 dll
  • 使用windeployqt 绝对是最好的选择!
  • @andseg 有。查看您的$QTDIR/$QTVERSION/$COMPILER 目录。应该有一个macdeployqt。我不确定 linux,因为 linux 默认使用系统范围的共享库,而不是内置到单个包中

标签: c++ windows qt dll


【解决方案1】:

听起来您的程序的目录结构不太正确。对于 Windows Qt5 应用程序,您应该在 .exe 文件所在的同一目录中有一个名为“platforms”的文件夹,并且在该平台文件夹中应该是文件 qwindows.dll

【讨论】:

  • 就是这样。当我从C:\Qt\5.7\mingw53_32\plugins 复制文件夹时,出现了platforms 文件夹。它在我的前两次尝试(Win7 和 WinXP)中起作用
【解决方案2】:

您说应用程序是使用 Qt 5.6.1 编译的,并且您还复制了 Qt 5.7.0 中的所有 .dll 文件。但是您应该使用与应用程序编译 (5.6.1) 相同的版本中的 .dll。由于版本不匹配,它似乎无法加载插件。

【讨论】:

    【解决方案3】:

    为什么会出现问题

    老实说,我不知道。但看起来“Alexander Saprykin”的答案是正确的。在测试过程中,我不得不更新我的 Qt,所以它很可能只是版本不匹配。

    此外,当我只使用 Qt 5.7.0 重新构建我的构建时,它确实有效,这意味着它确实只是一个不匹配的情况。

    我是如何解决的

    正如 cmets 中的“Sebastian Lange”所说,使用windeplyqt.exe 完成了这项工作。我刚刚删除了构建文件夹中除.exe 之外的所有内容,打开Qt5.7 命令行,将目录更改为与我的.exe 相同的目录并运行命令windeployqt .windeployqt [name_of_exe].exe

    谢谢大家!

    【讨论】:

      【解决方案4】:

      说您需要在包含您的应用程序的目录中包含 qwindows.dll 的“平台”目录的答案是正确的。重要的是,它必须直接在您的应用程序目录中,即 ./platforms/qwindows.dll,而不是在您的应用程序目录中的另一个目录中,例如 ./plugins/platforms/qwindows.dll

      这在 Qt 5.7 文档中有记录;在 Qt Creator 中,去帮助并查找“部署”。这里还有一些关于如何更改应用程序查找此库和其他库的位置的讨论。

      我遇到了同样的问题;我已经通过将我的应用程序和它所依赖的 DLL 以及包含 qwindows.dll 的名为平台的文件夹放在闪存驱动器上的目录中并在未安装 Qt 的计算机上打开应用程序来验证此解决方案的工作原理。该应用程序打开正常。

      【讨论】: