2013-05-27 3 views
28

Ich schreibe eine Qt-Anwendung unter Windows mit Visual Studio 2012. Verwendung des Qt-Add-Ins und einer benutzerdefinierten statische Verteilung von Qt 5.0.2. Ich renne in den gefürchteten "Failed to load platform plugin windows" Fehler, wenn ich die Anwendung ausführen. Ich habe folgendes an den Linker Eingang hinzugefügt:Qt5 Statische Build-Ergebnisse Fehler beim Laden des Plattform-Plugins "Windows"

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

Zuerst dachte ich, dass vielleicht sollte ich auch aber „qwindowsd.lib“ zu dieser Liste hinzuzufügen, die nicht das Problem zu beheben haben. Was muss ich tun, damit meine Bewerbung läuft?

Antwort

24

Ich löste es. Dank this konnte ich alles zum Laufen bringen. Ich habe die folgenden Bibliotheken:

opengl32.lib 
Qt5PlatformSupport.lib 
qwindows.lib 

ich auch folgendes meinen Code hinzugefügt:

#include <QtPlugin> 
Q_IMPORT_PLUGIN (QWindowsIntegrationPlugin); 
+1

Wie haben Sie qwindows.lib verlinkt? Der normale Weg zum Hinzufügen von LIBS + = qwindows.lib hat es nicht gefunden. – mphair

+1

qwindows.lib kann auch nirgends gefunden werden – jjxtra

+3

@PsychoDad Es ist nur verfügbar, wenn Sie die statischen Qt-Bibliotheken erstellt haben. Bei den normalen Builds, die von der Qt-Website heruntergeladen werden, müssen Sie lediglich die freigegebene Bibliothek qwindows.dll (oder qwindowsd.dll) in den Unterordner ** platforms ** neben Ihrer ausführbaren Builddatei einfügen. Machen Sie dieses Unterverzeichnis manuell. In ähnlicher Weise benötigen Sie abhängig von Ihrem Programm möglicherweise andere Plug-ins aus Image-Formaten usw. – chappjc

10

Ich hatte den gleichen Fehler mit MinGW Version von Qt (nicht statisch): „Fehler Plattform Plugin laden Fenster ". Die Lösung für mich war die DLLs libEGL.dll und libEGLd.dll hinzuzufügen.

+0

Das hat es für mich getan: http://stackoverflow.com/questions/20495620/qt-5-1-1-application-failed-to-start-because-platform-plugin-windows-is-missi DANKE! – Anonymous

5

Eine Alternative besteht darin, das Verzeichnis qtbase/plugins/platforms in die Debug/Release-Verzeichnisse zu kopieren und dabei nur qwindowsd.dll oder qwindows.dll zu belassen.

+0

Dies ist ein statischer Build. Keine DLLs, nur eine einzige EXE-Datei. – Dave

+0

Ah ich sehe. Hoffentlich ist dies nützlich für andere, die dlls verwenden. – darrenp

+0

Ja, Sie haben fast Recht, aber Sie müssen die "qwindowsd.dll" von "QtBase \ plugins \ Plattformen" auf den Ordner "platforms \ qwindowsd.dll" wie adler sagte. Vergessen Sie nicht den relativen Pfad! – Maks

0

Ich genau dieses Problem. Die Lösung besteht darin, das Qt in der Debug-Ausgabe zu überprüfen. In diesem Fenster werden alle geladenen DLLs angezeigt. Dies sind diejenigen, die Sie möglicherweise in Ihrem Distributions-Ex-Ordner benötigen.

+0

Dies ist ein statischer Build. Keine DLLs, nur eine einzige EXE-Datei. – Dave

24

Für dynamische Build nur: Stellen Sie sicher, dass Sie die qwindows.dll in das folgende Verzeichnis verschieben:

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

Beachten Sie, dass das Plugin-Verzeichnis fehlt! Sie legen alle benötigten Ordner von QT_BASE /.../ plugins/* direkt mit Ihren Binärdateien zusammen. BTW: Ich brauchte nicht libEGL.dll, aber meine Anwendung hat fast keine GUI.

Meine Quelle: http://qt-project.org/forums/viewthread/27056/#122588

+0

Ja, hast du recht. Für mich geht das! Vielen Dank! – Maks

+0

Arbeitete auch für mich. Es wäre nett zu wissen, wie dieser Bereitstellungsschritt in CMake> 3 funktioniert. – linello

+0

Danke, ich habe versehentlich nur die DLLs kopiert. Ich musste die Ordnerstruktur kopieren ... –

5

Sie könnten auch eine Umgebungsvariable machen:

QT_QPA_PLATFORM_PLUGIN_PATH=<QT_BASE>\plugins\platforms

, die in meinem Fall wird: QT_QPA_PLATFORM_PLUGIN_PATH=f:\Qt\5\5.4\msvc2013_opengl\plugins\platforms

So vermeiden Installation/Kopieren qwindows.dll während der Entwicklung (um Speicherplatz zu sparen !?). Diese Lösung wurde auch erwähnt on GitHub und here.

EDIT: Sorry, das ist nicht in einem statischen Build wirksam. Aber ich werde meine A hier verlassen.

+0

Ja - Das hat für mich funktioniert! –

+0

Das funktionierte für mich, wo das Kopieren der DLLs nicht ging – Cerno

3

Ok, ich hatte ähnliches Problem.

fand ich heraus, dass QT 5.2+ hat windeployq.exe

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

Verwenden Sie es mit dem Verzeichnis Ihres Projekts (wo die .exe deiner Anwendung ist). Und voilà! Automatisch alles verknüpft und bereit zum Bereitstellen!

Es wird die DLLs, Plugins etc ... automatisch erhalten!

Verwandte Themen