Qt 5.1.1: Imansible avviare l’applicazione perché manca il plugin di piattaforma “windows”


Modifica: alcune persone hanno iniziato a contrassegnare la mia domanda come duplicata. Non dimenticare che molte domande simili esistevano quando ho chiesto questo (vedi ad esempio la lista qui sotto). Tuttavia, nessuna di queste risposte ha risolto il mio problema . Dopo una lunga ricerca ho trovato un commento che era stato ignorato da tutti gli utenti che puntavano alla lib mancante. Ora, molti mesi dopo, il commento è stato modificato in una risposta. Tuttavia, quando ho risposto a questa domanda da solo, intendevo aiutare altre persone fornendo direttamente la soluzione. Questo non dovrebbe essere dimenticato e finora la mia risposta ha aiutato molte persone. Quindi la mia domanda non è sicuramente un duplicato. A proposito: la risposta accettata all’interno del link fornito in alto non risolve il problema !


Sì, ho usato la ricerca:

Imansible caricare il “plugin” della piattaforma. Le piattaforms disponibili sono: Errore

Distribuzione dell’applicazione Qt C ++ dall’errore di qwindows.dll di Visual Studio

imansible caricare il plugin di piattaforma “windows” Le piattaforms disponibili sono: windows, minimal

Tuttavia, nel mio caso il problema persiste ancora. Sto usando Qt 5.1.1 con Visual Studio 2012 e ho sviluppato la mia applicazione su Windows 7 con Qt Creator 2.8.1. L’applicazione è compilata in “Release” -mode e può essere eseguita se è stata avviata direttamente con Qt Creator.

Tuttavia, quando si inizia dal “rilascio” -Cartella, ottengo il seguente messaggio:

L’applicazione non è stata avviata poiché non è stato in grado di trovare o caricare il “plugin” della piattaforma Qt. I plugin di piattaforma disponibili sono: minimo, fuori schermo, Windows.

La struttura delle cartelle ha questo aspetto:

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

Platforms è la cartella copiata direttamente dalle piattaforms Qt \ Qt5.1.1 \ 5.1.1 \ msvc2012 \ plugins \ incluso eg qwindows.dll. Non importa se lo rinominano in “piattaforma” come hanno fatto altri utenti. Qt non sta ancora trovando le “windows dei plugin della piattaforma”, dov’è il mio errore?

Va bene, come postato qui https://stackoverflow.com/a/17271172/1458552 senza molta attenzione da parte di altri utenti:

Il libEGL.dll mancava! Anche se questo non è stato segnalato quando si tenta di avviare l’applicazione (tutti gli altri *. Dll come Qt5Gui.dll sono stati segnalati).

Ho creato una directory di piattaforms accanto alla mia posizione exe e ho inserito qwindows.dll all’interno, ma ho ancora ricevuto il messaggio “Imansible caricare il plugin della piattaforma”. “Le piattaforms disponibili sono: windows” errore.

Avevo copiato qwindows.dll dalle piattaforms C: \ Qt \ Qt5.1.1 \ Tools \ QtCreator \ bin \ plugins \, che non è la posizione giusta. Ho guardato il registro di debug dall’esecuzione in Qt Creator e ho scoperto che la mia app cercava nelle piattaforms C: \ Qt \ Qt5.1.1 \ 5.1.1 \ mingw48_32 \ plugins \ quando veniva eseguita nel debugger.

Quando ho copiato da C: \ Qt \ Qt5.1.1 \ 5.1.1 \ mingw48_32 \ plugins \ piattaforms, tutto ha funzionato bene.

Ho trovato una correzione inaspettata ma intuitiva. Se copi e incolli qwindows.dll, trovato nel cestino di qualsiasi compilatore usato per rilasciare la tua applicazione, in una cartella chiamata “piattaforms” puoi spostare quella cartella nella stessa directory dell’applicazione e come funziona la magia.

Un altro suggerimento utile, Qt viene fornito con le applicazioni della console di piattaforma che aggiungeranno tutte le dipendenze (comprese quelle come qwindows.dll e libEGL.dll) nella cartella del file eseguibile distribuito. L’applicazione per Windows si chiama windeployqt e la documentazione può essere trovata qui http://doc.qt.io/qt-5/windows-deployment.html . Questa applicazione mi ha salvato così tanto tempo ed è davvero il modo giusto per implementare il tuo eseguibile, in modo da non perdere nulla.

Impostando la variabile di ambiente QT_QPA_PLATFORM_PLUGIN_PATH su% QTDIR% \ plugins \ piattaforms \ ha funzionato per me .

E ‘stato anche menzionato qui e qui .

Mi sono imbattuto in questo e nessuna delle risposte che ho trovato lo ha risolto per me.

Il mio collector ha Qt (5.6.0) installato sul suo computer in: C: \ Qt \ Qt5.6.0 \ 5.6 \ msvc2015 \ plugins
Ho Qt (5.6.2) installato nella stessa posizione.

Ho imparato da questo post: http://www.tripleboot.org/?p=536 , che il Qt5Core.dll ha una posizione per i plugin scritti quando Qt viene installato per la prima volta. Poiché le directory del mio collega e di Qt erano le stesse, ma sono state installate diverse versioni di Qt, è necessario un diverso file qwindows.dll. Quando eseguivo un exe distribuito da lui, usava il mio file C: \ Qt \ Qt5.6.0 \ 5.6 \ msvc2015 \ plugins \ platforms \ qwindows.dll anziché quello che si trova accanto all’eseguibile nella sottocartella. \ Platforms.

Per aggirare questo problema, ho aggiunto la seguente riga di codice all’applicazione che sembra forzarla a guardare accanto all’exe per la sottocartella “piattaforms” prima di esaminare il percorso in Qt5Core.dll.

 QCoreApplication::addLibraryPath("."); 

Ho aggiunto la riga sopra al metodo principale prima della chiamata QApplication in questo modo:

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

Ho avuto questo problema durante l’utilizzo di QT 5.6, Anaconda 4.3.23, python 3.5.2 e pyinstaller 3.3. Avevo creato un programma python con un’interfaccia sviluppata usando QTcreator, ma dovevo distribuirlo ad altri computer, quindi avevo bisogno di fare un eseguibile, usando pyinstaller.

Ho trovato che il problema è stato risolto sul mio computer se ho impostato le seguenti variabili di ambiente:

QT_QPA_PLATFORM_PLUGIN_PATH:% QTDIR% \ plugins \ piattaforms \

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

Ma questa soluzione funzionava solo sul mio PC che aveva conda e qt installati in quelle cartelle.

Per risolvere questo problema e far funzionare l’eseguibile su qualsiasi computer, ho dovuto modificare il file “.spec” (il primo file generato da pyinstaller) per includere la riga seguente:

datas = [(‘C: \ Miniconda3 \ pkgs \ qt-5.6.2-vc14_3 \ Libreria \ plugins \ piattaforms * .dll’, ‘piattaforms’),]

Questa soluzione è basata sulle risposte di Jim G. e CrippledTable

Ho avuto lo stesso problema e l’ho risolto applicando diverse cose. Il primo, se è un programma che hai fatto con Qt.

Nella cartella (nel mio caso) di “C: \ Qt \ Qt5.10.0 \ 5.10.0 \ msvc2017_64 \ plugins” trovi altre cartelle, una delle quali è “piattaforms”. Quella cartella “piattaforms” verrà copiata accanto al tuo eseguibile .exe. Ora, se ottieni l’errore 0xc000007d significa che non hai copiato la versione che era, dal momento che può essere 32 bit o 64.

Se continui con gli errori, ti mancano più librerie. Con il programma “Dependency Walker” è ansible rilevare alcune delle cartelle mancanti. Sicuramente ti indicherà che hai bisogno di una .dll NVIDIA, e ti dice la posizione.

Un altro modo, invece di utilizzare “Dependency Walker” è copiare tutti i file .dll dalla cartella “C: \ Windows \ System32” accanto al file eseguibile. Esegui il tuo .exe e se tutto si carica bene, quindi non hai spazio occupato nelle librerie dll che non ti servono o non usi, usa il programma .exe con tutte le opzioni e senza chiudere l’.exe che fai cancella tutto. dll che hai appena copiato accanto all’exe, quindi se quei .dll vengono usati dal tuo programma, il sistema non ti permetterà di cancellare, rimuovendo solo quelli che non sono necessari.

Spero che questa soluzione ti serva.

Ricorda che se il tuo sistema operativo è a 64 bit, le librerie si troveranno nella cartella System32 e se il tuo sistema operativo è a 32 bit, saranno anche nella cartella System32. Ciò si verifica in modo che non vi siano problemi di compatibilità con i programmi 32 bit in un computer a 64 bit. La cartella SysWOW64 contiene i file a 32 bit come backup.

Molte di queste risposte contengono informazioni (corrette) corrette, ma nel mio caso mancava ancora qualcosa.

La mia app è costruita come una libreria (dll) e chiamata da un’applicazione non Qt. Ho usato windeployqt.exe per configurare le DLL, le piattaforms, i plugin, ecc. Di Qt nella directory di installazione, ma non ho ancora trovato la piattaforma. Dopo alcuni esperimenti, mi sono reso conto che la directory di lavoro dell’applicazione era impostata su una cartella diversa. Quindi, ho afferrato la directory in cui la DLL “viveva” usando GetModuleHandleExA e ho aggiunto quella directory al percorso della libreria Qt in fase di runtime usando

 QCoreApplication::addLibraryPath(); 

Questo ha funzionato per me.

Ho trovato un’altra soluzione. Crea qt.conf nella cartella dell’app come tale:

 [Paths] Prefix = . 

E poi copia la cartella dei plugin nella cartella dell’app e funziona per me.

Per una piattaforma MinGW e se si sta compilando un objective Debug con un CMakeLists.txt fatto a mano scritto ad hoc, è necessario aggiungere anche qwindows.dll alla directory della piattaforma. L’eseguibile di windeployqt funziona bene, ma sembra che per qualche strana ragione la build di CMake abbia bisogno anche della variante di rilascio. In breve, sarà meglio avere sia qwindows.dll che qwindowsd.dll nella directory della piattaforma. Non ho notato lo stesso strano risultato durante l’importazione del progetto CMake in QtCreator e quindi nell’esecuzione della procedura di compilazione. Compilando sulla riga di comando il progetto CMake sembra triggersre la dipendenza qwindows.dll o se quello corretto per il target di Debug è impostato sul posto (qwindowsd.dll)

Utilizzare questo file batch: 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 
  • per usarlo, trascina il tuo file gui.exe e rilasciatelo su RunWithQt.bat in explorer,
  • o chiamare RunWithQt gui.exe dalla riga di comando

crea platforms dir e copia qwindows.dll , platforms e app.exe trovano nella stessa dir

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

Struttura delle cartelle + app.exe + platforms\qwindows.dll

Se hai installato Anaconda ti consiglio di disinstallarlo e provare a installare il pacchetto python dal sorgente, ho risolto questo problema in questo modo