Application n'a pas pu démarrer parce qu'il ne pouvait pas trouver ou charger le plugin de la plate-forme QT " windows"
j'ai examiné toutes les questions qui semblent liées au débordement de la pile, et aucune des solutions ne semble m'aider.
je construis une application Qt avec cette configuration:
- Windows 7 Professional x64
- Visual Studio 2012
- Qt 5.2.0 construit avec
configure -developer-build -debug-and-release -opensource -nomake examples -nomake tests -platform win32-msvc2012 -no-opengl
- le projet utilise QtSingleApplication (qt-solutions)
- Application est un 32 bits
- qmake courir avec ce qui suit: -makefile-spec win32-msvc2012
- .pri utilise
QMAKE_CXX += /D_USING_V110_SDK71_
je peux construire et exécuter mon programme correctement sur ma machine de développement (noté ci-dessus); je peux aussi installer et exécuter le paquet à partir du répertoire de fichiers de programmes sur dev machine.
Quand je l'ai installer et l'exécuter sur un ordinateur Windows Vista (plusieurs machines)
- VC++ redist 2012 11.0.61030.0 installed
- VC++ redist 2010 10.0.40219 installé
- plus 2005, 2008 versions de redist
(échoue également sur une installation propre de Windows 7)
j'obtiens:
Application failed to start because it could not find or load the QT platform plugin "windows"
J'ai donc suivi les instructions et ajouté un.plates-formes / répertoire, et ajouté qwindows.dll (également ajouté qminimal.dll et qoffscreen.dll); j'ai aussi ajouté libEGL.dll, libGLESv2.dll (même si Je ne devrais pas avoir besoin d'eux je ne pense pas)
une fois que j'ai ajouté qoffscreen.dll je reçois maintenant le supplémentaire message:Available platform plugins are: offscreen
Si je passe par Dependency Walker, j'obtiens cette erreur répertoriés:
GetProcAddress(0x76CA0000 [KERNEL32.DLL], "GetCurrentPackageId") called from "MSVCR110.DLL" at address 0x6AC6FDFA and returned NULL. Error: The specified procedure could not be found (127).
et puis plus bas obtenir l':
GetProcAddress(0x745A0000 [UXTHEME.DLL], "BufferedPaintUnInit") called from "COMCTL32.DLL" at address 0x745FFBF8 and returned 0x745AE18C.
This application failed to start because it could not find or load the Qt platform plugin "windows".
Available platform plugins are: offscreen.
Reinstalling the application may fix this problem.
des idées pour résoudre ce problème dll?
11 réponses
l'erreur est causée parce que le programme ne peut pas trouver qwindows.dll
qwindows.dll
doit être dans un dossier nommé platforms
de sorte que le chemin de l'exécutable à la dll est platforms/qwindows.dll
alors que ce n'était pas assez dans mon cas. J'ai eu aussi d'ajouter la ligne suivante au début de mon main()
QCoreApplication::addLibraryPath("./");
alors tout a fonctionné.
j'ai eu ce problème et comment je l'ai résolu:
marcheur de dépendances usagé (http://www.dependencywalker.com/) pour voir le chemin exact des dlls nécessaires. Essayez-le parce que QtCreator et Qt framework ont tous les deux les mêmes dlls et vous devez préciser ceux qui sont utilisés. J'ai copié toutes les dll nécessaires dans le même dossier que l'application.
j'ai copié les plates-formes de dossiers à partir de Qt framework /plugins et l'ai copié dans le même dossier que le App. Maintenant l'application comprenait aussi plugin / platform / folder avec tous ses dlls
Et l'étape la plus importante dans mon cas est de créer un fichier nommé qt.conf dans le même dossier que l'application . Ce fichier doit contenir le chemin vers les plugins. Mon qt.fichier conf contient:
[Chemins]
Bibliothèque.=./ lib / qtcreator
Plugins=plugins
Importations=importations
Qml2Imports=qml
l'application est capable de fonctionner sur le système hôte, puisque le Qt bin
chemin d'accès dans le système PATH
variable.
il existe un outil Qt standard pour le déploiement des applications Qt sur Windows windeployqt
pour pouvoir exécuter L'application sur des machines cibles qui n'ont pas QT installé.
cet outil prend soin des dépendances DLL Qt, fait une copie de platforms\qwindows.dll
et aussi il fait une copie des bibliothèques que vous ne pouvez pas détecter avec le Dépendance Walker, puisque les plugins image et quelques autres DLLs sont chargés à l'exécution.
Vous n'avez même pas besoin d'avoir votre Qt bin
dossier dans votre environnement PATH
. Le plus simple déploiement:
- copie construite
exe
binaire à un nouveau dossier - ouvrir
cmd
console dans ce dossier - appel
windeployqt
utiliser le chemin complet (si elle n'est pas dans le systèmePATH
) et fournir votre exécutable, pour exemple:c:\Qt\Qt5.2.1.2.1\msvc2010_opengl\bin\windeployqt.exe application.exe
en conséquence, vous avez dans ce dossier tous les DLLs Qt nécessaires pour exécuter l'application.
L'outil windeployqt
a plusieurs options. Il peut également s'occuper du déploiement de qml
les fichiers liés.
bien sûr, vous pouvez avoir aussi des problèmes avec les redistribuables MSVC, mais ceux-ci devraient être déployés séparément et installés une fois par système.
seulement quelques bibliothèques tierces devraient être copiées manuellement s'ils sont utilisés, par exemple OpenSSL.
j'ai eu le même problème "Application n'a pas pu démarrer parce qu'il ne pouvait pas trouver ou charger le plugin de la plateforme QT "windows" J'ai corrigé ceci en copiant les fichiers ci-dessous dans l'application.le dossier exe (mon exécutable d'application),
Qt5Core.dll, Qt5Gui.dll, Qt5Widgets.dll et un répertoire "plates-formes" avec qminimal.dll, qoffscreen.dll, qwindows.DLL.
j'espère que cela aidera quelqu'un
notez que ce numéro peut si le chemin de recherche pour qwindows.dll
qui est codé dans votre application inclut le chemin où vous avez installé Qt. Envisagez le scénario suivant:
- j'ai installer Qt
c:\Qt\...
- je développe une application et la déploie correctement ailleurs.
- il fonctionne correctement sur n'importe quel ordinateur parce qu'il inclut
qwindows.dll
dans un sous-répertoire. - je mets à jour mon Qt local pour en faire un nouveau version.
- j'essaie de relancer mon application.
Le résultat est cette erreur, parce que le qwindows.dll
c:\Qt\...
avant l'un dans son répertoire local et il est incompatible avec elle. Très ennuyeux.
Une solution est de placer un fichier qt.conf
dans le même répertoire que votre fichier exe. Je ne sais pas comment faire pour éviter cela. Si vous avez utilisé l'outil windeployqt.exe
pour déployer votre application, vous avez un sous-répertoire nommé platforms
, alors c'est suffisant:
[Paths]
Plugins=.
pour les gens qui ont ce problème dans le futur - j'ai un sale petit piratage, travaillé pour moi. Essayer à vos risques et périls.
suivre toutes les étapes du déploiement Initial (rapide et sale) [http://wiki.qt.io/Deploy_an_Application_on_Windows]
- Proche Créateur De Qt.
- copier ce qui suit dans C:\Deployment la version de sortie de MyApp.exe Tous les .fichiers dll à partir de C:\Qt\5.2.1\mingw48_32\bin tous les dossiers de C:\Qt\5.2.1\mingw48_32\plugins\
- (si vous avez utilisé QML) tous les dossiers de C:\Qt\5.2.1\mingw48_32\qml\ renommer C:\Qt\ à C:\QtHidden\ (cela transforme votre PC en un environnement propre, tout comme un qui n'a pas QT installé).
- Lancement C:\Deployment\MyApp.EXE.
Maintenant pour le hack -
- dupliquez votre dossier pour des raisons de sécurité
- si votre fichier était dans / cat / Deployment, passez à / cat
- maintenant, supprimez Dossier de déploiement pendant que le .exe est toujours en cours d'exécution.
- il vous indiquera qu'il ne peut pas supprimer certains fichiers, alors dites Skip (ou skip all)
- ce qu'il vous reste est la liste de tous les .les fichiers dll que votre .exe est effectivement impossible de supprimer: la liste de tous les fichiers et uniquement les fichiers que vous devez garder.
Vous pouvez fermer la .fichier exe maintenant. Pour vérifier s'il se déploie correctement, allez dans le dossier où vous l'avez installé, par exemple C:/Qt et renommez-le en C:/NotQt (essentiellement rendre Qt invisible au système). S'il fonctionne maintenant, il se déploiera le plus souvent sur d'autres systèmes.
Eh bien j'ai résolu mon problème, bien que je ne suis pas sûr quelle est la différence:
j'ai copié toutes les dll de mon répertoire qt dans les deux ./ et. / plates-formes de mon répertoire d'applications.
l'application a passé l'erreur, mais s'est ensuite écrasée.
VERSION.dll était à l'origine du crash (noté dans dependency walker), donc je l'ai retiré des deux endroits.
l'Application a démarré, donc j'ai systématiquement supprimé toutes les dll non nécessaires.
ce got moi, dans le même état que j'avais à l'origine.
j'ai alors désinstallé mon application et l'ai réinstallée (avec seulement le ./plates-formes/qwindows.dll fichier restant), l'application fonctionne correctement.
donc tout ce que je peux supposer est que j'ai eu une version incorrecte de qwindows.dll dans le répertoire des plateformes.
j'ai le même numéro: 1. il peut fonctionner en VS2010; 2. il peut fonctionner dans un dossier avec les fichiers qu': App.EXE \plateformes\qwindows.DLL ...
- mais il n'a pas réussi à charger qwindows sur une machine propre avec le même OS que celui en développement.
résolu simplement en déplaçant le dossier de la plate-forme vers les plugins: App.EXE plugins\plateformes\qwindows.dll
plus: qwindows.dll peuvent être renommés comme tout comme il est interrogé par un plugin interafce: qt_plugin_query_metadata ()
il manque qwindows.dll, qui normalement devrait être dans les plates-formes, sauf si vous ajoutez:
QCoreApplication::addLibraryPath("<yourpath>");
si vous ne faites pas cela btw, et mettez vos qwindows.dll ailleurs, Qt va chercher votre chemin pour la DLL, ce qui peut prendre beaucoup de temps (10s - plusieurs minutes)!
pour moi, je nécessaire de définirQT_QPA_PLATFORM_PLUGIN_PATH
dans le répertoire des plates-formes et ça a marché.
pour ce que ça vaut, Cette solution était aussi mentionné sur GitHub.
essayé tout ce qui précède-s'est avéré pour moi c'était tout simplement parce que je n'avais pas la main Qt
les dll dans le apps
dossier
- Qt5Core.dll
- Qt5Widgets.dll
- etc