Qt 5.1.1:应用程序无法启动,因为缺少平台插件“windows”

时间:2013-12-10 13:16:48

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


修改 有些人开始将我的问题标记为重复。当我问这个问题时,不要忘记存在许多类似的问题(参见下面的列表)。但是,这些答案都没有解决我的问题。经过长时间的搜索后,我发现了一条评论,但是所有用户都指向了缺少的lib。现在,几个月后,评论已经改为答案。然而,当我自己回答这个问题时,我打算通过直接提供解决方案来帮助其他人。这不应该被遗忘,到目前为止,我的答案帮助了很多人。因此,我的问题绝对不是重复的。 顺便说一下:顶部提供的链接中接受的答案无法解决问题


是的,我使用了搜索:

Failed to load platform plugin "windows". Available platforms are : Error

Deploying Qt C++ Application from Visual Studio qwindows.dll error

failed to load platform plugin "windows" Available platforms are: windows, minimal

然而,就我而言,问题仍然存在。我正在使用Qt 5.1.1与Visual Studio 2012,并使用Qt Creator 2.8.1在Windows 7上开发我的应用程序。应用程序以“Release”模式编译,如果直接使用Qt Creator启动,则可以执行。

然而,当从“release”-Folder开始时,我收到以下消息:

  

此应用程序无法启动,因为它无法找到或加载   Qt平台插件“windows”。可用的平台插件是:   最小的,屏幕外的,窗户。

文件夹结构如下所示:

release
+ gui.exe
+ icudt51.dll
+ icuin51.dll
+ icuuc51.dll
+ libGLESv2.dll
+ Qt5Core.dll
+ Qt5Gui.dll
+ Qt5Widgets.dll
+ platforms

平台是直接从 Qt \ Qt5.1.1 \ _ 5.1.1 \ msvc2012 \ plugins \ platforms 复制的文件夹,包括例如qwindows.dll。如果我像其他一些用户那样将它重命名为“平台”并不重要。 Qt仍然没有找到“平台插件窗口”,我的错误在哪里?

20 个答案:

答案 0 :(得分:63)

好的,发布在此处https://stackoverflow.com/a/17271172/1458552没有得到其他用户的太多关注:

缺少 libEGL.dll !尽管在尝试启动应用程序时尚未报告此问题(已报告所有其他* .dll,例如Qt5Gui.dll)。

答案 1 :(得分:34)

我在我的exe位置旁边创建了一个平台目录并将qwindows.dll放入其中,但我仍然收到“无法加载平台插件”窗口“。可用平台是:windows”错误。

我从C:\ Qt \ Qt5.1.1 \ Tools \ QtCreator \ bin \ plugins \ platforms复制了qwindows.dll,这不是正确的位置。我查看了在Qt Creator中运行的调试日志,发现我的应用程序在调试器中运行时正在查看C:\ Qt \ Qt5.1.1 \ 5.1.1 \ mingw48_32 \ plugins \ platforms。

当我从C:\ Qt \ Qt5.1.1 \ 5.1.1 \ mingw48_32 \ plugins \ platforms复制时,一切正常。

答案 2 :(得分:20)

我发现了一个意外但直观的修复。如果您将用于发布应用程序的编译器的bin中的qwindows.dll复制并粘贴到名为" platforms"的文件夹中。然后,您可以将该文件夹移动到与您的应用程序相同的目录中,就像魔术一样。

另一个有用的提示,Qt附带平台控制台应用程序,它将所有依赖项(包括qwindows.dll和libEGL.dll等)添加到已部署的可执行文件的文件夹中。 windows的应用程序称为windeployqt,文档可以在http://doc.qt.io/qt-5/windows-deployment.html找到。

答案 3 :(得分:11)

QT_QPA_PLATFORM_PLUGIN_PATH环境变量设置为%QTDIR%\ plugins \ platforms \ worked for me

还提到了herehere

答案 4 :(得分:7)

我碰到了这个,我找不到任何答案。

我的同事在他的机器上安装了Qt(5.6.0): C:\ Qt \ Qt5.6.0 \ 5.6 \ msvc2015 \ plugins
我把Qt(5.6.2)安装在同一个位置。

我从这篇文章中了解到:http://www.tripleboot.org/?p=536,Qt5Core.dll在首次安装Qt时有一个写入插件的位置。 由于我的同事和我的Qt目录是相同的,但安装了不同版本的Qt,因此需要一个不同的qwindows.dll文件。当我运行他部署的exe时,它将使用我的C:\ Qt \ Qt5.6.0 \ 5.6 \ msvc2015 \ plugins \ platforms \ qwindows.dll文件,而不是位于。\ platforms子文件夹中可执行文件旁边的文件。

为了解决这个问题,我在应用程序中添加了以下代码行,这似乎迫使它在“平台”的exe旁边查看。子文件夹在查看Qt5Core.dll中的路径之前。

QCoreApplication::addLibraryPath(".");

我在QApplication调用之前将上面的行添加到main方法中:

int main( int argc, char *argv[] )
{
    QCoreApplication::addLibraryPath(".");
    QApplication app( argc, argv );
    ...
    return app.exec();
}

答案 5 :(得分:5)

创建目录platforms并将qwindows.dll复制到其中,platformsapp.exe位于同一目录

cd app_dir mkdir platforms xcopy qwindows.dll platforms\qwindows.dll

文件夹结构 + app.exe + platforms\qwindows.dll

答案 6 :(得分:3)

我找到了另一个解决方案。在app文件夹中创建qt.conf:

logs

然后将plugins文件夹复制到app文件夹中,它对我有用。

答案 7 :(得分:2)

这些答案中的大多数都包含良好(正确)的信息,但在我的情况下,仍然缺少某些内容。

我的应用程序是作为库(dll)构建的,并由非Qt应用程序调用。我使用windeployqt.exe在安装目录中设置Qt dll,平台,插件等,但它仍然无法找到平台。经过一些实验,我意识到应用程序的工作目录设置为不同的文件夹。所以,我使用GetModuleHandleExA抓住dll“生活”的目录,并在运行时使用

将该目录添加到Qt库路径
QCoreApplication::addLibraryPath(<result of GetModuleHandleExA>);

这对我有用。

答案 8 :(得分:1)

我遇到了同样的问题并通过应用几件事来解决它。 第一个,如果它是你用Qt做的程序。

在“C:\ Qt \ Qt5.10.0 \ 5.10.0 \ msvc2017_64 \ plugins”的文件夹(在我的例子中)中,您可以找到其他文件夹,其中一个是“平台”。 “platform”文件夹将被复制到.exe可执行文件旁边。现在,如果你得到错误0xc000007d是你没有复制那个版本,因为它可以是32位或64位。

如果你继续犯错误就是你缺少更多的库。使用“Dependency Walker”程序,您可以检测到一些丢失的文件夹。当然它会告诉你你需要一个NVIDIA .dll,并告诉你它的位置。

另一种方法,不是使用“Dependency Walker”,而是从您的可执行文件旁边的“C:\ Windows \ System32”文件夹中复制所有.dll。执行你的.exe,如果一切都加载好,所以你没有在你不需要或使用的dll库中占用空间,使用带有所有选项的.exe程序,而不关闭你执行的.exe就是擦除所有。您刚刚复制到.exe旁边的DLL,所以如果您的程序正在使用这些.dll,系统将不会让您擦除,只删除那些不必要的。

我希望这个解决方案为您服务。

请记住,如果您的操作系统是64位,则库将位于System32文件夹中,如果您的操作系统是32位,它们也将位于System32文件夹中。发生这种情况是为了使64位计算机中的32位程序不存在兼容性问题。 SysWOW64文件夹包含32位文件作为备份。

答案 9 :(得分:1)

对于来自QT版本5.14.0的任何人,我花了2天的时间才发现此错误陈述:

windeployqt不适用于MinGW QTBUG-80763将在 5.14.1

https://wiki.qt.io/Qt_5.14.0_Known_Issues

所以要注意。将Windeployqt与MinGW结合使用会产生此处所述的错误。

答案 10 :(得分:1)

使用QT 5.6,Anaconda 4.3.23,python 3.5.2和pyinstaller 3.3时遇到了这个问题。 我创建了一个python程序,其中包含使用QTcreator开发的接口,但必须将其部署到其他计算机,因此我需要使用pyinstaller创建可执行文件。

如果我设置了以下环境变量,我发现问题已在我的计算机上解决:

  

QT_QPA_PLATFORM_PLUGIN_PATH:%QTDIR%\ plugins \ platforms \

     

QTDIR:C:\ Miniconda3 \ pkgs \ qt-5.6.2-vc14_3 \ Library

但是这个解决方案只适用于那些在这些文件夹中安装了conda和qt的PC。

要解决此问题并使可执行文件在任何计算机上运行,​​我必须编辑“.spec”(由pyinstaller首先生成的文件)以包含以下行:

  

DATAS = [(   'C:\ Miniconda3 \ PKGS \ QT-5.6.2-vc14_3 \库\插件\平台的* .dll',   '平台'),]

此解决方案基于Jim G.和CrippledTable

的答案

答案 11 :(得分:0)

使用此批处理文件:RunWithQt.bat

@echo off
set QTDIR=C:\Qt\Qt5.1.1\5.1.1\msvc2012\bin
set QT_QPA_PLATFORM_PLUGIN_PATH=%QTDIR%\plugins\platforms\
start %1
  • 使用它,拖动你的gui.exe文件并将其放在资源管理器中的RunWithQt.bat上,
  • 或从命令行调用RunWithQt gui.exe

答案 12 :(得分:0)

如果你安装了Anaconda,我建议你卸载它并尝试从源代码安装python包,我用这种方式解决了这个问题

答案 13 :(得分:0)

对于MinGW平台,如果您通过手工制作的CMakeLists.txt编写调试目标,则需要将qwindows.dll添加到平台目录中。 windeployqt可执行文件运行良好但似乎由于一些奇怪的原因,CMake构建也需要发布版本。 总之,最好在平台目录中同时使用qwindows.dll和qwindowsd.dll。 在QtCreator中导入CMake项目然后运行构建过程时,我没有注意到同样奇怪的结果。 在命令行编译CMake项目似乎触发qwindows.dll依赖项,如果调试目标的正确设置(qwindowsd.dll)

答案 14 :(得分:0)

应用程序 qtbase / bin / windeployqt.exe 自动部署您的应用程序。如果在环境变量设置正确的情况下启动提示,则提示将部署到当前目录。 您会找到一个脚本示例:

@echo off
set QTDIR=E:\QT\5110\vc2017

set INCLUDE=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\ATLMFC\include;S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\include;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um;C:\Program Files (x86)\Windows Kits\10\include\10.0.14393.0\ucrt;C:\Program Files (x86)\Windows Kits\10\include\10.0.14393.0\shared;C:\Program Files (x86)\Windows Kits\10\include\10.0.14393.0\um;C:\Program Files (x86)\Windows Kits\10\include\10.0.14393.0\winrt;C:\Program Files (x86)\Windows Kits\10\include\10.0.14393.0\cppwinrt

set LIB=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\ATLMFC\lib\x86;S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\lib\x86;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\lib\um\x86;C:\Program Files (x86)\Windows Kits\10\lib\10.0.14393.0\ucrt\x86;C:\Program Files (x86)\Windows Kits\10\lib\10.0.14393.0\um\x86;

set LIBPATH=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\ATLMFC\lib\x86;S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\lib\x86;S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\lib\x86\store\references;C:\Program Files (x86)\Windows Kits\10\UnionMetadata\10.0.17134.0;C:\ProgramFiles (x86)\Windows Kits\10\References\10.0.17134.0;C:\Windows\Microsoft.NET\Framework\v4.0.30319;

Path=%QTDIR%\qtbase\bin;%PATH%
set VCIDEInstallDir=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\VC\
set VCINSTALLDIR=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\
set VCToolsInstallDir=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\
set VisualStudioVersion=15.0
set VS100COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\
set VS110COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools\
set VS120COMNTOOLS=S:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\
set VS150COMNTOOLS=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\
set VS80COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 8\Common7\Tools\
set VS90COMNTOOLS=c:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools\
set VSINSTALLDIR=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\
set VSSDK110Install=C:\Program Files (x86)\Microsoft Visual Studio 11.0\VSSDK\
set VSSDK150INSTALL=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VSSDK
set WindowsLibPath=C:\Program Files (x86)\Windows Kits\10\UnionMetadata;C:\Program Files (x86)\Windows Kits\10\References
set WindowsSdkBinPath=C:\Program Files (x86)\Windows Kits\10\bin\
set WindowsSdkDir=C:\Program Files (x86)\Windows Kits\10\
set WindowsSDKLibVersion=10.0.14393.0\
set WindowsSdkVerBinPath=C:\Program Files (x86)\Windows Kits\10\bin\10.0.14393.0\
set WindowsSDKVersion=10.0.14393.0\
set WindowsSDK_ExecutablePath_x64=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\x64\
set WindowsSDK_ExecutablePath_x86=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\

mkdir C:\VCProjects\Application\Build\VS2017_QT5_11_32-Release\setup
cd C:\VCProjects\Application\Build\VS2017_QT5_11_32-Release\setup
copy /Y ..\Release\application.exe .
windeployqt application.exe
pause

答案 15 :(得分:0)

让我们说,您想携带一些CGAL-Demos可移植物。因此,您将拥有一个文件夹“ CGAL”,并在其中有一个名为“ lib”的子文件夹:CGAL文件夹中任何程序的所有(通用)support-dll都在这里。在我们的示例中,这将是Dll-Download:只需解压缩到“ lib”目录中即可。向下滚动demos-page越深,内容就越令人印象深刻。就我而言,polyhedron-demo似乎是正确的。如果这在我的10岁以上笔记本电脑上运行,我会印象深刻。因此,我在“ CGAL”目录中以及“ lib”旁边创建了一个文件夹“ demo”。 现在在该文件夹中创建一个.cmd文件。我命名为“ Polyhedron.cmd”。所以我们有这样的目录结构:

 CGAL - the bag for all the goodies
  lib - all libraries for all CGAL-packages
 demo - all the demos I'm interested in
[...] - certainly some other collections, several apps per folder...
Polyhedron.cmd - and a little script for every Qt-exe to make it truly portable.

在这个小示例中,“ Polyhedron.cmd”包含以下文本:

@echo off
set "me=%~dp0"
set PATH=%me%lib
set "QT_PLUGIN_PATH=%me%lib\plugins"
start /b "CGAL Polyhedron Demo" "%me%demo\polyhedron\polyhedron_3.exe"

很明显,除了最后一行,所有脚本都可以相同。唯一的警告是:只要您使用实际程序,“ DOS窗口”就保持打开状态。关闭外壳窗口,并杀死* .exe。无论在何处复制“ CGAL”文件夹,因为怪异的“%〜dp0” -wroggle代表我们开始的* .cmd文件的完整路径,后跟“ \”。因此,“%me%lib”始终是实际库的完整路径(本例中为“ CGAL \ lib”)。接下来的2行告诉Qt它的“运行时”文件在哪里。这至少是Windows-Qt程序的文件“ qwindows.dll”加上任意数量的* .dll。如果我没记错的话,Dll库(至少在下载时)有一个“ bug”,因为它包含带有qwindows.dll的“ platforms”目录。因此,当您打开lib目录时,需要在“平台”旁边创建一个文件夹“插件”,然后移动到“插件”中。如果Qt应用程序 any Qt应用程序找不到“ qwindows.dll”,则找不到“ windows”。它期望它在“ plugins”目录中一个名为“ platforms”的目录中,操作系统必须告知该目录运行该目录...并且如果“ QT_PLUGIN_PATH”未完全指向您所有的helper-dll需要时,某些Qt程序仍然可以无问题地运行。有些人抱怨丢失了从未听说过的* .dll ...

答案 16 :(得分:0)

对我来说,解决方案是更正PATH变量。它以Anaconda3 \ Library \ bin作为第一条路径之一。此目录包含一些 Qt库,但不是全部。显然,这是一个问题。将C:\ Programs \ Qt \ 5.12.3 \ msvc2017_64 \ bin移到PATH的前面为我解决了这个问题。

答案 17 :(得分:0)

我在Windows 10(VS2019)中运行QT5应用程序时遇到了同样的问题。 我的错误是

.. \ Debug \ Qt5Cored.dll
模组:5.14.1
文件:kernel \ qguiapplication.cpp
线:1249

此应用程序无法启动,因为无法初始化Qt平台插件。
重新安装应用程序可能会解决此问题。

解决方案

由于我使用的是QT msvc2017,所以我将插件文件夹从“ C:\ Qt \ Qt5.14.1 \ 5.14.1 \ msvc2017 \ plugins”位置复制到二进制位置

有效。

然后检查Visual Studio输出窗口,并确定从插件文件夹加载的dll,并删除不需要的dll

答案 18 :(得分:0)

QT_PLUGIN_PATH 环境变量设置为 <...>/plugins 目录也对我有用。

答案 19 :(得分:0)

我遇到了同样的错误,并使用与其他帖子中提到的方法不同的方法解决了它。希望这对未来的读者有所帮助。

构建:

Windows 10(64 位) Minicoda(使用 python 3.9.4)(pkgs 来自 conda-forge 频道) pyqt 5.12.3

我的场景:

我正在为一些嵌入式工作构建一个 GUI 应用程序。我有两台用于开发的机器(相同的操作系统和架构),其中一台的互联网连接为零。打包我的环境并在离线机器上安装后,我遇到了您遇到的错误。

解决方案:

在您的 conda 环境中找到 qt.conf 文件。 对我来说:C:\Users\"name"\miniconda3\envs\"env_name"\qt.conf

确保路径正确。我需要更新“名称”,因为这是旧机器遗留下来的。

希望这对某人有所帮助。