web-dev-qa-db-fra.com

Qt 5.1.1: Échec du démarrage de l'application car le plug-in de plate-forme "Windows" est manquant.


Modifier: Certaines personnes ont commencé à marquer ma question comme un doublon. N'oubliez pas que de nombreuses questions similaires existaient lorsque j'ai posé cette question (voir par exemple la liste ci-dessous). Cependant, aucune de ces réponses n'a résolu mon problème. Après une longue recherche, j'ai trouvé un commentaire qui avait été ignoré par tous les utilisateurs pointant vers la lib manquante. Plusieurs mois plus tard, le commentaire a été modifié en réponse. Cependant, lorsque j’ai répondu à cette question par moi-même, j’ai voulu aider d’autres personnes en fournissant directement la solution. Cela ne devrait pas être oublié et jusqu'à présent, ma réponse a aidé beaucoup de gens. Par conséquent, ma question n'est certainement pas un doublon. Soit dit en passant: La réponse acceptée dans le lien fourni en haut ne résout pas le problème!


Oui, j'ai utilisé la recherche:

Impossible de charger le plug-in de plate-forme "Windows". Les plates-formes disponibles sont les suivantes: Erreur

Déploiement de l'application Qt C++ from Visual Studio erreur qwindows.dll

Impossible de charger le plug-in de plate-forme "Windows". Les plates-formes disponibles sont: Windows, Minime

Cependant, dans mon cas, le problème persiste. J'utilise Qt 5.1.1 avec Visual Studio 2012 et j'ai développé mon application sous Windows 7 avec Qt Creator 2.8.1. L'application est compilée en mode "Release" et peut être exécutée si elle est lancée directement avec Qt Creator.

Cependant, en partant du dossier "release", j'obtiens le message suivant:

Cette application n'a pas pu démarrer car elle n'a pas pu trouver ou charger le fichier Qt plugin de plate-forme "Windows". Les plugins de plate-forme disponibles sont: minimal, hors écran, windows.

La structure des dossiers ressemble à ceci:

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

Plateformes est le dossier directement copié de Qt\Qt5.1.1\5.1.1\msvc2012\plugins\plates-formes, par exemple, par exemple. qwindows.dll. Peu importe si je le renomme "plate-forme" comme d'autres utilisateurs l'ont fait. Qt ne trouve toujours pas les "plugins de plate-forme Windows", où est ma faute?

101
Anonymous

D'accord, tel que posté ici https://stackoverflow.com/a/17271172/1458552 sans faire très attention aux autres utilisateurs: 

Le fichier libEGL.dll était manquant! Même si cela n’a pas été signalé lors de la tentative de démarrage de l’application (tous les autres fichiers * .dll, tels que Qt5Gui.dll, avaient été signalés).

62
Anonymous

J'ai créé un répertoire de plates-formes à côté de mon emplacement exe et y ai placé qwindows.dll, mais j'ai quand même reçu l'erreur "Impossible de charger le plug-in de plate-forme" windows ".

J'avais copié qwindows.dll à partir de C:\Qt\Qt5.1.1\Tools\QtCreator\bin\plugins\plates-formes, ce qui n’est pas le bon emplacement. J'ai consulté le journal de débogage de Qt Creator et constaté que mon application cherchait C:\Qt\Qt5.1.1\5.1.1\mingw48_32\plugins\plates-formes lors de l'exécution dans le débogueur. 

Lorsque j'ai copié depuis C:\Qt\Qt5.1.1\5.1.1\mingw48_32\plugins\plates-formes, tout a bien fonctionné.

34
Brandon

J'ai trouvé une solution inattendue mais intuitive. Si vous copiez et collez le fichier qwindows.dll, situé dans le bac du compilateur avec lequel vous avez publié votre application, dans un dossier nommé "plates-formes", vous pouvez ensuite déplacer ce dossier dans le même répertoire que votre application et, comme par magie, cela fonctionne. 

Autre astuce utile, Qt est fourni avec les applications de console de plate-forme qui ajouteront toutes les dépendances (y compris celles telles que qwindows.dll et libEGL.dll) dans le dossier de votre exécutable déployé. L'application pour Windows s'appelle windeployqt et la documentation est disponible ici http://doc.qt.io/qt-5/windows-deployment.html . Cette application m'a permis de gagner beaucoup de temps et constitue le moyen idéal de déployer votre exécutable pour ne rien manquer.

19
CrippledTable

Définir la variable d'environnement QT_QPA_PLATFORM_PLUGIN_PATH sur% QTDIR%\plugins\plates-formes \ a fonctionné pour moi .

Il a également été mentionné ici et ici .

10
Jim G.

Je me suis heurté à cela et aucune des réponses que je pouvais trouver ne me l'a réglé. 

Qt (5.6.0) est installé sur mon ordinateur à l’adresse: C:\Qt\Qt5.6.0\5.6\msvc2015\plugins 
Qt (5.6.2) est installé au même endroit. 

J'ai appris dans cet article: http://www.tripleboot.org/?p=536 , que Qt5Core.dll a un emplacement dans les plugins écrits lors de la première installation de Qt ..__ Les répertoires Qt de mon collègue et de Qt étant identiques, mais une version différente de Qt étant installée, un fichier qwindows.dll différent est nécessaire. Quand j’exécutais un exe déployé par lui, il utilisait mon fichier C:\Qt\Qt5.6.0\5.6\msvc2015\plugins\platform\qwindows.dll au lieu de celui situé à côté de l’exécutable du sous-dossier.\Plates-formes.

Pour contourner cela, j'ai ajouté la ligne de code suivante à l'application, ce qui semble l'obliger à regarder à côté de l'exe pour le sous-dossier 'plates-formes' avant de regarder le chemin dans Qt5Core.dll. 

QCoreApplication::addLibraryPath(".");

J'ai ajouté la ligne ci-dessus à la méthode principale avant l'appel QApplication comme ceci:

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

créer un répertoire platforms et y copier le qwindows.dll, platforms et app.exe sont dans le même répertoire

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

Structure des dossiers + app.exe + platforms\qwindows.dll

2
KunMing Xie

La plupart de ces réponses contiennent de bonnes informations (correctes), mais dans mon cas, il manquait encore quelque chose.

Mon application est construite en tant que bibliothèque (dll) et appelée par une application non-Qt. J'ai utilisé windeployqt.exe pour configurer les dll Qt, les plates-formes, les plugins, etc. dans le répertoire d'installation, mais la plate-forme n'a toujours pas été trouvée. Après quelques expérimentations, j'ai réalisé que le répertoire de travail de l'application était défini dans un autre dossier. J'ai donc saisi le répertoire dans lequel la DLL "vivait" en utilisant GetModuleHandleExA et ajouté ce répertoire au chemin de la bibliothèque Qt au moment de l'exécution à l'aide de 

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

Cela a fonctionné pour moi.

2
Jacob Robbins

J'ai trouvé une autre solution. Créez qt.conf dans le dossier de l'application en tant que tel:

[Paths]
Prefix = .

Et puis copiez le dossier des plugins dans le dossier de l'application et cela fonctionne pour moi.

1
Peter Quiring

J'avais ce problème lorsque j'utilisais QT 5.6, Anaconda 4.3.23, python 3.5.2 et pyinstaller 3.3 . J'avais créé un programme python avec une interface développée avec QTcreator, mais je devais le déployer sur d'autres ordinateurs. faire un exécutable, en utilisant pyinstaller.

J'ai constaté que le problème était résolu sur mon ordinateur si je définissais les variables d'environnement suivantes:

QT_QPA_PLATFORM_PLUGIN_PATH:% QTDIR%\plugins\plateformes \

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

Mais cette solution ne fonctionnait que sur mon PC sur lequel conda et qt étaient installés dans ces dossiers. 

Pour résoudre ce problème et faire fonctionner l'exécutable sur n'importe quel ordinateur, j'ai dû modifier le ".spec" (fichier généré en premier par pyinstaller) afin d'inclure la ligne suivante:

datas = [( 'C:\Miniconda3\pkgs\qt-5.6.2-vc14_3\Bibliothèque\plugins\plateformes * .dll', 'plateformes'),]

Cette solution est basée sur les réponses de Jim G. et CrippledTable

1

J'ai eu le même problème et l'ai résolu en appliquant plusieurs choses ... La première, si c'est un programme que vous avez fait avec Qt.

Dans le dossier (dans mon cas) de "C:\Qt\Qt5.10.0\5.10.0\msvc2017_64\plugins", vous trouvez d'autres dossiers, l'un d'eux est "plates-formes". Ce dossier "plates-formes" va être copié à côté de votre exécutable .exe. Maintenant, si vous obtenez l’erreur 0xc000007d, c’est que vous n’avez pas copié la version précédente, car il peut s’agir de 32 bits ou 64 bits.

Si vous continuez avec les erreurs, c'est qu'il vous manque plus de bibliothèques. Avec le programme "Dependency Walker", vous pouvez détecter certains des dossiers manquants. Cela vous indiquera sûrement que vous avez besoin d’un fichier .dll NVIDIA, ainsi que de l’emplacement.

Au lieu d'utiliser "Dependency Walker", vous pouvez également copier tous les fichiers .dll de votre dossier "C:\Windows\System32" à côté de votre fichier exécutable. Exécutez votre fichier .exe et si tout se charge bien, afin de ne pas occuper plus de place dans les bibliothèques dll, utilisez le programme .exe avec toutes vos options et sans fermer le fichier .exe que vous effacez. dll que vous venez de copier à côté du fichier .exe, donc si ces fichiers .dll sont utilisés par votre programme, le système ne vous laissera pas effacer, ne supprimant que ceux qui ne sont pas nécessaires.

J'espère que cette solution vous sert.

N'oubliez pas que si votre système d'exploitation est à 64 bits, les bibliothèques seront dans le dossier System32 et si votre système d'exploitation est à 32 bits, elles seront également dans le dossier System32. Cela se produit afin d'éviter tout problème de compatibilité avec les programmes 32 bits d'un ordinateur 64 bits . Le dossier SysWOW64 contient les fichiers 32 bits en tant que sauvegarde.

1
Ire

Si vous avez installé Anaconda, je vous recommande de le désinstaller et d'essayer d'installer le paquet python à partir du code source.

0
Soberbia coding

Pour moi, la solution a été de corriger la variable PATH. Anaconda3\Library\bin était l'un des premiers chemins. Ce répertoire contient les bibliothèques some Qt, mais pas toutes. Apparemment, c'est un problème. Déplacer C:\Programmes\Qt\5.12.3\msvc2017_64\bin vers le début de PATH a résolu le problème pour moi.

0
Jann Poppinga

L'application qtbase/bin/windeployqt.exe déploie automatiquement votre application. Si vous démarrez une invite avec des variables d'environnement définies correctement, elle se déploie dans le répertoire en cours .. Vous trouvez un exemple de script:

@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

Utilisez ce fichier de commandes: 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
  • pour l'utiliser, faites glisser votre fichier gui.exe et déposez-le sur le RunWithQt.bat dans l'Explorateur,
  • ou appelez RunWithQt gui.exe à partir de la ligne de commande
0
Jakub Krzesłowski

Pour une plate-forme MinGW et si vous compilez une cible de débogage avec un CMakeLists.txt écrit à la main écrit ad hoc, vous devez également ajouter le fichier qwindows.dll au répertoire de la plate-forme . Le fichier exécutable windeployqt fonctionne bien, mais il semble que pour une raison étrange, la compilation de CMake a également besoin de la variante de version . En résumé, il sera préférable d’avoir qwindows.dll et qwindowsd.dll dans le répertoire de votre plate-forme . Je n’ai pas remarqué le même étrange lors de l 'importation du projet CMake dans QtCreator, puis de l' exécution de la procédure de construction . Compiler sur la ligne de commande le projet CMake semble déclencher la dépendance qwindows.dll si le correct pour la cible Debug est défini (qwindows. dll)

0
Michal Turlik

Disons que vous souhaitiez disposer de CGAL-Demos portables. Donc, vous auriez un dossier "CGAL", et dedans, un sous-dossier appelé "lib": toutes les dlls support (communes) pour tous les programmes du dossier CGAL vont ici. Dans notre exemple, ce serait le Dll-Download : décompressez simplement dans le répertoire "lib". Plus vous faites défiler la page de démonstration vers le bas, plus le contenu est impressionnant. Dans mon cas, le polyèdre-démo semblait à peu près correct. Si cela fonctionne sur mon ordinateur portable de 10 ans et plus, je suis impressionné. J'ai donc créé un dossier "demo" dans le répertoire "CGAL", à côté de "lib" . Créez maintenant un fichier .cmd dans ce dossier. J'ai nommé le mien "Polyhedron.cmd". Nous avons donc une structure de répertoire comme celle-ci:

 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.

Dans ce petit exemple, "Polyhedron.cmd" contient le texte suivant:

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

Tous les scripts peuvent être identiques sauf la dernière ligne, évidemment. Le seul inconvénient est que la "fenêtre DOS" reste ouverte aussi longtemps que vous utilisez le programme. Fermez la fenêtre du shell et tuez également le fichier * .exe. Où que vous copiez le dossier "CGAL", car l'étrange "% ~ dp0" représente le chemin d'accès complet au fichier * .cmd que nous avons commencé, suivi de "\". Donc "% me% lib" est toujours le chemin complet de la bibliothèque actuelle ("CGAL\lib" dans mon cas). Les deux lignes suivantes indiquent à Qt où se trouvent ses fichiers "d'exécution". Ce sera au moins le fichier "qwindows.dll" pour les programmes Windows-Qt plus un nombre quelconque de * .dlls. Si je me souviens bien, la bibliothèque Dll (du moins lorsque je l'ai téléchargée) avait un petit "bogue" car elle contient le répertoire "plates-formes" avec qwindows.dll. Ainsi, lorsque vous ouvrez le répertoire lib, vous devez créer un dossier "plugins" à côté de "plateformes", puis move dans "plugins". Si une application Qt, any Qt-app, ne trouve pas "qwindows.dll", il ne peut pas trouver "Windows". Et il l’attend dans un répertoire nommé "plateformes" dans le répertoire "plugins", sur lequel le système d’exploitation lui dit de s’exécuter ... et si "QT_PLUGIN_PATH" ne pointe pas exactement vers toutes les dll helper besoin, certains programmes Qt fonctionneront toujours sans problème. Et certains se plaignent de manquer * .dlls que vous n'avez jamais entendu parler ...

0
Thomas Sturm