2015-11-10 2 views
1

J'essaye de déployer une application QT5.4.1 sur Windows 7 - x86.QT erreur de déploiement

Comme toujours, tout fonctionne correctement sur ma machine, mais pas sur la machine de l'utilisateur final.

Lorsque je tente de lancer l'application, il me donne l'erreur suivante:

enter image description here

Après des recherches sur Internet, la plupart des solutions disent que je dois ajouter des dossiers de plates-formes contenant des dll (qminimal , qoffscreen, etc) au paquet de déploiement. J'ai essayé ça sans succès.

Le plus drôle est que je copiais dossier d'installation QT sur la machine de l'utilisateur final et supprimé tout sauf ce dossier (C: \ Qt \ Qt5.4.1 \ 5.4 \ msvc2012_opengl \ plugins \ plates-formes) et il fonctionne très bien. Donc, d'une manière ou d'une autre, mon application recherche les dossiers des plates-formes dans le dossier d'installation QT au lieu du dossier du paquet de déploiement.

Est-ce que quelqu'un sait comment le résoudre?

EDIT: J'ai réussi à remplacer toutes les DLLs QT par la version finale (sans suffixe "d"). Cependant, quand je compile mon projet, je reçois toujours des dlls vC++ en mode debug. J'ai vérifié toutes les configurations de projet dans les sections "linker" et "c/C++" et elles utilisent toutes des configurations "release". Quand je lance le programme, il me donne une "assertion de débogage échouée". Pourquoi je reçois les versions de débogage de vC++ dlls?

Voici la capture d'écran marcheur de dépendance

dependecy walker

+0

Avez-vous essayé d'ajouter /platforms/qwindows.dll au lieu de /plugins/platforms/qwindows.dll? – Mezzo

+0

oui, j'ai essayé ... :-( – guilhermecgs

+1

Je recommande d'utiliser Dependency Walker sur l'ordinateur de l'utilisateur pour déterminer quelles DLL sont manquantes: http://www.dependencywalker.com/ – RedOctober

Répondre

0

-je savoir ce qui est faux, bien que je n'ai pas encore la solution. Même sans la solution, je pense que cette réponse pourrait être utile.

La sortie de mon projet est une DLL qui a une interface graphique en QT.

Un autre programme appelle cette DLL et pendant DLL_PROCESS_ATTACH une interface graphique QT est créée.

Selon le documentation, QT recherche les plugins dans:

in the directory containing the application executable, i.e. > QCoreApplication::applicationDirPath() + QDir::separator() + "qt.conf"

pourquoi le QCoreApplication Thats :: applicationDirPath() est pas le répertoire de déploiement où se trouve la DLL, mais le répertoire où le programme externe * .exe est en cours d'exécution. Je pense que QT est à la recherche du fichier qt.conf dans ce * emplacement .exe

EDIT: il n'y a rien à voir avec les versions debug ou release

1

Les commentaires de Mezzo semblent très pertinents. Nous déployons régulièrement des applications commerciales Windows Qt. Vous pouvez utiliser Dependency Walker pour trouver les dépendances ou simplement double-cliquer sur l'exécutable et regarder la plainte de Windows sur ce que les DLL sont manquantes. Copiez-les simplement dans l'emplacement de déploiement, de préférence avec un script qmake.

Les plugins dll sont plus difficiles à gérer. Ils n'apparaissent pas en tant que dépendances.Le système d'exploitation pourrait se plaindre de leur absence (dll se trouve dans le sous-répertoire "plates-formes" par exemple) ou votre application pourrait ne pas utiliser leurs fonctionnalités (dll dans le sous-répertoire "imageformats" par exemple) sans aucune plainte. Pour vous protéger contre ce dernier cas, vous devez tester votre application à fond.

Windows n'a pas besoin d'un fichier qt.conf. Créez simplement les sous-répertoires "platformes", "imageformats", ... dans le répertoire de l'application et copiez le plugin dll là. A titre d'exemple, je montre le contenu complet d'un répertoire d'application (mingw) qui, même copié sur une machine virtuelle, s'exécute sans problème.

snapshot of content of a deployed Qt Windows application

Qt5Btc1.dll est notre propre dll.

+0

J'ai résolu le problème. Mon fichier de sortie n'est pas un exe, mais une DLL. Un programme externe utilise cette DLL. Ainsi, le dossier de travail n'est pas le dossier DLL, mais le dossier du programme externe. S'il vous plaît voir: https://forum.qt.io/topic/60534/error-deploying-qt5-4-1-in-windows-x86/2 – guilhermecgs