(Qt 5.7.0)无法找到或加载qt平台插件“windows”

4
请记住这一切都是使用 Qt Creator (5.6.1和5.7) 进行的:
我在我的工作机器上创建了一个项目(Win7,64位,使用MinGW 5.3.0 32位在Qt 5.6.1中编译)。它在调试和发布模式下都能完美运行。
不久之后,我决定在另一台机器上测试我的程序(WinXp,32位)。我只传递可执行文件和.dll文件。仍然像魔术般一样工作。
稍后,我在我的游戏机器(Win10,64位)上测试了相同版本的程序。奇怪的是,它完全无法工作。我收到以下错误:

"找不到或加载qt平台插件“windows”"。


我记得如果有缺失的.dll文件,就会出现这个错误。所以我把Qt文件夹中所有的.dll文件都传到我的程序文件夹中(有意删除不需要的文件)。令我惊讶的是,它仍然无法工作。但错误信息不同:


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


很明显找到了平台插件windows(qwindows或qwindowsd...或这两者),但无法加载它。有什么想法吗?


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

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

这几乎是我添加的所有.dll文件了!


由于您从未解释您从哪里复制了DLL,我假设您在这些DLL或其依赖项中存在位数不匹配的问题。 - IInspectable
3
不要复制所有可以找到的dll文件,只需将您的.exe文件放置在一个空文件夹中,并打开Qt5.*命令行。然后运行:windeployqt yourfile.exe。这将从Qt发行版中复制所需的dll文件。 - Sebastian Lange
1
使用 windeployqt 绝对是这里的最佳选择! - Mailerdaimon
@SebastianLange 另外... windeployqt 只适用于 Windows 吗?是否有另一个命令适用于 MAC 或 Linux? - andseg
1
@andseg 是的。请查看 $QTDIR/$QTVERSION/$COMPILER 目录。那里应该有一个 macdeployqt。对于 Linux,我不确定,因为 Linux 默认使用系统范围内的共享库,并没有构建成单个软件包。 - Sebastian Lange
显示剩余3条评论
4个回答

10

问题发生的原因

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

此外,重新使用仅 Qt 5.7.0 进行构建时工作正常,这表明确实只是一个版本不匹配的情况。

如何解决它

正如“Sebastian Lange”在评论中所述,使用 windeplyqt.exe 就可以解决问题了。我只需删除构建文件夹中除了 .exe 之外的所有内容,在Qt5.7命令行中打开,将目录更改为与我的 .exe 文件相同的位置,然后运行命令 windeployqt .windeployqt [name_of_exe].exe

感谢大家!


6
似乎您的程序文件夹结构不正确。对于 Windows Qt5 应用程序,您应该在 .exe 文件所在的目录中有一个名为 "platforms" 的文件夹,而且在该文件夹中应该有名为 qwindows.dll 的文件。请按照上述格式进行设置。

当我从C:\Qt\5.7\mingw53_32\plugins复制文件夹时,platforms文件夹也被复制了。在我的前两次尝试中(Win7和WinXP),它都能正常工作。 - andseg

1
正确的答案是,你需要一个“platforms”目录,其中包含应用程序所在目录中的qwindows.dll。重要的是,它必须直接位于应用程序目录内,即./platforms/qwindows.dll,而不是在应用程序目录内的其他目录中,如./plugins/platforms/qwindows.dll。
这在Qt 5.7文档中有记录;在Qt Creator中,转到帮助并查找“部署”。此外,这里还有一些关于如何更改应用程序寻找此和其他库的位置的讨论。
我遇到了同样的问题;通过将我的应用程序和它依赖的DLL以及一个名为platforms的文件夹放入闪存驱动器上的目录中,并在没有安装Qt的计算机上打开应用程序来验证此解决方案有效。应用程序正常打开。

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接