it-swarm.com.de

Qt 5.1.1: Die Anwendung konnte nicht gestartet werden, da das Plattform-Plugin "Windows" fehlt


Edit: Einige Leute haben angefangen, meine Frage als Duplikat zu markieren. Vergessen Sie nicht, dass es viele ähnliche Fragen gab, als ich diese Frage stellte (siehe z. B. die Liste unten). Keine dieser Antworten löste mein Problem. Nach einer langen Suche fand ich ein Kommentar, das von allen Benutzern ignoriert wurde, die auf die fehlende lib verweisen. Nun, viele Monate später, wurde der Kommentar in eine Antwort geändert. Als ich diese Frage jedoch von mir selbst beantwortete, wollte ich anderen Menschen helfen, indem ich direkt die Lösung liefere. Dies sollte nicht vergessen werden und bisher hat meine Antwort vielen Menschen geholfen. Daher ist meine Frage definitiv kein Duplikat. Übrigens: Die akzeptierte Antwort innerhalb des angegebenen Links löst das Problem nicht!


Ja, ich habe die Suche benutzt:

Fehler beim Laden des Plattform-Plugins "Windows". Verfügbare Plattformen sind: Fehler

Bereitstellen der Qt C++ - Anwendung von Visual Studio qwindows.dll Fehler

Das Plattform-Plugin "Windows" konnte nicht geladen werden. Verfügbare Plattformen sind: Windows, minimal

In meinem Fall bleibt das Problem jedoch bestehen. Ich verwende Qt 5.1.1 mit Visual Studio 2012 und entwickelte meine Anwendung unter Windows 7 mit Qt Creator 2.8.1. Die Anwendung wird im "Release" -Modus kompiliert und kann ausgeführt werden, wenn sie direkt mit Qt Creator gestartet wird.

Beim Starten vom "release" -Folder bekomme ich jedoch die folgende Meldung:

Diese Anwendung konnte nicht gestartet werden, da sie die .__-Datei nicht finden oder laden konnte. Qt-Plattform-Plugin "Windows". Verfügbare Plattform-Plugins sind: minimal, offscreen, fenster.

Die Ordnerstruktur sieht folgendermaßen aus:

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

Plattformen ist der Ordner, der direkt aus Qt\Qt5.1.1\5.1.1\msvc2012\plugins\platform einschließlich z. qwindows.dll. Es spielt keine Rolle, ob ich ihn in "Plattform" umbenenne, wie es andere Benutzer getan haben. Qt findet immer noch nicht die "Plattform-Plugin-Fenster", wo liegt mein Fehler?

101
Anonymous

Okay, wie hier gepostet https://stackoverflow.com/a/17271172/1458552 ohne viel Aufmerksamkeit anderer Benutzer: 

Die libEGL.dll fehlte! Obwohl dies beim Start der Anwendung nicht gemeldet wurde (alle anderen * .dlls wie Qt5Gui.dll wurden gemeldet).

62
Anonymous

Ich habe ein Plattformverzeichnis neben meinem Exe-Speicherort erstellt und die Datei qwindows.dll eingefügt, aber ich habe immer noch die Fehlermeldung "Fehler beim Laden des Plattform-Plugins" erhalten. Verfügbare Plattformen sind: Windows "-Fehler.

Ich hatte qwindows.dll von C:\Qt\Qt5.1.1\Tools\QtCreator\bin\plugins\platform kopiert, was nicht der richtige Speicherort ist. Ich habe mir das Debug-Protokoll in Qt Creator angesehen und festgestellt, dass meine App bei der Ausführung im Debugger C:\Qt\Qt5.1.1\5.1.1\mingw48_32\plugins\platform sah. 

Als ich von C:\Qt\Qt5.1.1\5.1.1\mingw48_32\plugins\platform kopierte, funktionierte alles einwandfrei.

34
Brandon

Ich habe eine unerwartete, aber intuitive Lösung gefunden. Wenn Sie die Datei qwindows.dll kopieren und in die Ablage des Compilers einfügen, den Sie zum Freigeben Ihrer Anwendung verwendet haben, in einen Ordner mit dem Namen "platform", können Sie diesen Ordner in dasselbe Verzeichnis wie Ihre Anwendung verschieben. 

Ein weiterer hilfreicher Tipp: Qt wird mit Plattformkonsolenanwendungen geliefert, die alle Abhängigkeiten (einschließlich der zum Beispiel qwindows.dll und libEGL.dll) in den Ordner der bereitgestellten ausführbaren Datei einfügen. Die Anwendung für Windows heißt windeployqt. Die Dokumentation finden Sie hier http://doc.qt.io/qt-5/windows-deployment.html . Diese Anwendung hat mir so viel Zeit gespart und es ist wirklich der richtige Weg, um Ihre ausführbare Datei bereitzustellen, um nichts zu verpassen.

19
CrippledTable

Setzen der Umgebungsvariable QT_QPA_PLATFORM_PLUGIN_PATH auf% QTDIR%\plugins\platform \ für mich gearbeitet .

Es wurde auch hier und hier erwähnt.

10
Jim G.

Ich bin darauf gestoßen und keine der Antworten, die ich finden konnte, hat es für mich behoben. 

Mein Kollege hat Qt (5.6.0) auf seinem Computer installiert unter: C:\Qt\Qt5.6.0\5.6\msvc2015\plugins 
Ich habe Qt (5.6.2) am selben Ort installiert. 

Ich habe aus diesem Beitrag erfahren: http://www.tripleboot.org/?p=536 , dass die Qt5Core.dll einen Speicherort für die Plugins hat, wenn Qt zum ersten Mal installiert wird ..__ Da meine Kollegen und meine Qt-Verzeichnisse identisch waren, jedoch eine andere Version von Qt installiert wurde, ist eine andere Datei qwindows.dll erforderlich. Wenn ich ein von ihm bereitgestelltes Exe ausführte, würde es meine Datei C:\Qt\Qt5.6.0\5.6\msvc2015\plugins\platform\qwindows.dll anstelle der Datei verwenden, die sich neben der ausführbaren Datei im Unterordner.\Platform befindet.

Um dies zu umgehen, fügte ich der Anwendung die folgende Codezeile hinzu, die sie zwingt, neben dem Exe nach dem Unterordner "platform" zu suchen, bevor der Pfad in der Qt5Core.dll betrachtet wird. 

QCoreApplication::addLibraryPath(".");

Ich habe vor dem Aufruf von QApplication die obige Zeile zur main-Methode hinzugefügt:

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

erstellen Sie das Verzeichnis platforms und kopieren Sie qwindows.dll in dieses Verzeichnis. platforms und app.exe befinden sich im selben Verzeichnis

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

Ordnerstruktur + app.exe + platforms\qwindows.dll

2
KunMing Xie

Die meisten dieser Antworten enthalten gute (richtige) Informationen, aber in meinem Fall fehlte noch etwas.

Meine App ist als Bibliothek (DLL) erstellt und wird von einer Nicht-Qt-Anwendung aufgerufen. Ich habe windeployqt.exe verwendet, um die Qt-DLLs, Plattformen, Plugins usw. im Installationsverzeichnis einzurichten, aber die Plattform wurde immer noch nicht gefunden. Nach einigen Experimenten stellte ich fest, dass das Arbeitsverzeichnis der Anwendung auf einen anderen Ordner eingestellt war. Also griff ich das Verzeichnis, in dem die DLL "lebte", mit GetModuleHandleExA und fügte dieses Verzeichnis zur Laufzeit mit dem Qt-Bibliothekspfad hinzu 

QCoreApplication::addLibraryPath(<result of GetModuleHandleExA>);

Das hat bei mir funktioniert.

2
Jacob Robbins

Ich habe eine andere Lösung gefunden. Erstellen Sie die Datei qt.conf wie folgt im App-Ordner:

[Paths]
Prefix = .

Und kopiere dann den Plugins-Ordner in den App-Ordner und es funktioniert für mich.

1
Peter Quiring

Ich hatte dieses Problem bei der Verwendung von QT 5.6, Anaconda 4.3.23, Python 3.5.2 und pyinstaller 3.3 ..__ Ich hatte ein Python-Programm mit einer mit QTcreator entwickelten Schnittstelle erstellt, musste es jedoch auf anderen Computern bereitstellen und brauchte es daher Um eine ausführbare Datei zu erstellen, verwenden Sie pyinstaller.

Ich habe festgestellt, dass das Problem auf meinem Computer behoben wurde, wenn die folgenden Umgebungsvariablen festgelegt wurden:

QT_QPA_PLATFORM_PLUGIN_PATH:% QTDIR%\plugins\platform \

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

Diese Lösung funktionierte jedoch nur auf meinem PC, auf dem Conda und Qt installiert waren. 

Um dieses Problem zu lösen und die ausführbare Datei auf jedem Computer zum Laufen zu bringen, musste ich die ".spec" -Datei (die zuerst von pyinstaller erzeugte Datei) so bearbeiten, dass sie die folgende Zeile enthält:

datas = [( 'C:\Miniconda3\pkgs\qt-5.6.2-vc14_3\Library\plugins\platform * .dll', 'platform'),]

Diese Lösung basiert auf den Antworten von Jim G. und CrippledTable

Ich hatte das gleiche Problem und löste es, indem ich mehrere Dinge anwendete ... Das erste, wenn es ein Programm ist, das Sie mit Qt gemacht haben.

In dem Ordner (in meinem Fall) von "C:\Qt\Qt5.10.0\5.10.0\msvc2017_64\plugins" finden Sie andere Ordner, einer davon ist "Plattformen". Dieser "Plattformen" -Ordner wird neben Ihrer ausführbaren .exe-Datei kopiert. Wenn Sie nun den Fehler 0xc000007d erhalten, bedeutet dies, dass Sie die Version nicht kopiert haben, da sie 32 Bit oder 64 Bit haben kann.

Wenn Sie mit den Fehlern fortfahren, fehlen Ihnen mehr Bibliotheken. Mit dem Programm "Dependency Walker" können Sie einige der fehlenden Ordner erkennen. Sicherlich zeigt es Ihnen an, dass Sie eine NVIDIA-DLL benötigen, und es gibt Ihnen den Ort an.

Anstatt "Dependency Walker" zu verwenden, können Sie auch die gesamte DLL aus dem Ordner "C:\Windows\System32" neben Ihrer ausführbaren Datei kopieren. Führen Sie Ihre .exe-Datei aus. Wenn alles gut geladen ist, benötigen Sie also keinen Speicherplatz in DLL-Bibliotheken, die Sie nicht benötigen oder verwenden. Verwenden Sie das .exe-Programm mit allen Ihren Optionen. dll, die Sie gerade neben der EXE-Datei kopiert haben. Wenn diese DLL-Datei von Ihrem Programm verwendet wird, werden Sie nicht vom System gelöscht, sondern nur die nicht benötigten entfernt.

Ich hoffe, dass diese Lösung Ihnen dient.

Denken Sie daran, dass sich die Bibliotheken bei einem 64-Bit-Betriebssystem im Ordner System32 befinden und bei einem 32-Bit-Betriebssystem auch im Ordner System32. Dies geschieht so, dass keine Kompatibilitätsprobleme mit Programmen auftreten, die 32 Bit in einem 64-Bit-Computer enthalten .. Der SysWOW64-Ordner enthält die 32-Bit-Dateien als Sicherungskopie.

1
Ire

Wenn Sie Anaconda installiert haben, empfehle ich, dass Sie es deinstallieren und versuchen, das Python-Paket vom Quellcode zu installieren. Dieses Problem wurde auf diese Weise behoben

0
Soberbia coding

Für mich bestand die Lösung darin, die Variable PATH zu korrigieren. Es hatte Anaconda3\Library\bin als einen der ersten Pfade. Dieses Verzeichnis enthält einige Qt-Bibliotheken, jedoch nicht alle. Anscheinend ist das ein Problem. Das Verschieben von C:\Programs\Qt\5.12.3\msvc2017_64\bin nach vorne in PATH hat das Problem für mich gelöst.

0
Jann Poppinga

Die Anwendung qtbase/bin/windeployqt.exe implementiert Ihre Anwendung automatisch. Wenn Sie eine Eingabeaufforderung starten, bei der die Umgebungsvariablen korrekt eingestellt sind, wird sie im aktuellen Verzeichnis bereitgestellt. Sie finden ein Beispiel für ein Skript:

@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
0
MyGeertRo

Verwenden Sie diese Batchdatei: 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
  • um es zu verwenden, ziehen Sie die Datei gui.exe in das RunWithQt.bat im Explorer.
  • oder rufen Sie RunWithQt gui.exe von der Befehlszeile aus auf
0

Bei einer MinGW-Plattform und beim Kompilieren eines Debug-Ziels durch ein von Hand erstelltes Ad-hoc-Verfahren mit CMakeLists.txt müssen Sie die qwindows.dll ebenfalls zum Plattformverzeichnis hinzufügen .. Die ausführbare Datei windeployqt funktioniert einwandfrei, scheint jedoch zu funktionieren Aus irgendeinem merkwürdigen Grund benötigt der CMake-Build auch die Release-Variante . Zusammenfassend ist es besser, sowohl die qwindows.dll als auch die qwindowsd.dll in Ihrem Plattformverzeichnis zu haben. Ich habe das selbe seltsame nicht bemerkt Ergebnis beim Importieren des CMake-Projekts in QtCreator und anschließender Ausführung der Erstellungsprozedur .. __ Wenn das CMake-Projekt in der Befehlszeile kompiliert wird, scheint es die qwindows.dll-Abhängigkeit auszulösen. dll)

0
Michal Turlik

Nehmen wir an, Sie wollten CGAL-Demos tragbar haben. Sie hätten also einen Ordner "CGAL" und darin einen Unterordner namens "lib": Alle (allgemeinen) Support-DLLs für alle Programme im CGAL-Ordner gehen hierher. In unserem Beispiel wäre dies das Dll-Download : einfach in das Verzeichnis "lib" entpacken. Je weiter Sie auf der Demos-Seite nach unten scrollen, desto beeindruckender ist der Inhalt. In meinem Fall schien das Polyedere-Demo ungefähr richtig zu sein. Wenn dies auf meinem 10-jährigen Notebook läuft, bin ich beeindruckt. Also habe ich im "CGAL" -Verzeichnis neben "lib" ..__ einen Ordner "demo" erstellt. Erstellen Sie nun eine .cmd-Datei in diesem Ordner. Ich habe meine "Polyhedron.cmd" genannt. Wir haben also eine Verzeichnisstruktur wie folgt:

 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.

In diesem kleinen Beispiel enthält "Polyhedron.cmd" den folgenden Text:

@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"

Natürlich können alle Skripte bis auf die letzte Zeile gleich sein. Der einzige Nachteil ist: Das "DOS-Fenster" bleibt so lange geöffnet, wie Sie das eigentliche Programm verwenden. Schließen Sie das Shell-Fenster, und Sie beenden auch die * .exe. Wo auch immer Sie den "CGAL" -Ordner kopieren, stellt der seltsame "% ~ dp0" -wriggle den vollständigen Pfad zu der * .cmd-Datei dar, die wir begonnen haben, mit einem nachgestellten "\". "% Me% lib" ist also immer der vollständige Pfad zur aktuellen Bibliothek (in meinem Fall "CGAL\lib"). Die nächsten zwei Zeilen zeigen Qt, wo sich die "Laufzeitdateien" befinden. Dies ist mindestens die Datei "qwindows.dll" für Windows-Qt-Programme plus eine beliebige Anzahl von * .dlls. Wenn ich mich recht erinnere, hatte die Dll-Bibliothek (zumindest beim Download) einen kleinen "Bug", da sie das "platform" -Verzeichnis mit qwindows.dll enthält. Wenn Sie also das lib-Verzeichnis öffnen, müssen Sie einen Ordner "plugins" neben "platform" erstellen und dann move in "plugins" verschieben. Wenn eine Qt-App any Qt-app "qwindows.dll" nicht findet, kann sie "Windows" nicht finden. Und es erwartet es in einem Verzeichnis namens "platform" im "plugins" -Verzeichnis, dem es vom Betriebssystem mitgeteilt werden muss, dass es läuft ... und wenn "QT_PLUGIN_PATH" nicht genau auf alle Helfer-DLLs verweist, die Sie verwenden Einige Qt-Programme laufen trotzdem ohne Probs. Und einige beschweren sich über fehlende * .dlls, die Sie noch nie gehört haben ...

0
Thomas Sturm