9
votes

Impossible d'exécuter mon fichier EXE sur un autre ordinateur. "Application demandée à l'exécution de la résilier de manière inhabituelle" Erreur

Mon exe fonctionne complètement bien sur l'ordinateur que j'ai programmé. Il débogue bien, libère bien, et je peux déplacer le fichier EXE du dossier "Libération" dans un nouveau fichier, localiser les fichiers .dll nécessaires à partir de C: \ pathoqt \ ming47_32 \ bin et ça marche toujours bien. Cependant, lorsque j'essaie d'exécuter ce programme sur un autre ordinateur avec les fichiers .dll inclus, je ne peux pas le faire et je reçois que "l'application a demandé à l'exécution de le terminer de manière inhabituelle".

J'ai testé cela sur 2 ordinateurs Windows 7 et 1 Windows XP. J'ai utilisé la dépendance Walker et téléchargé un tas de .dll et ça n'a toujours pas fonctionné. J'ai réussi à l'obtenir à toute la DLL soit "trouvé" statut "trouvé" ou "rouge".

Paramètres de construction: http://puu.sh/3qtv3.png

J'utilise Qt5.0.2, Minggw 4.7 32bit.

J'ai aussi trébuché sur ceci .. http://puu.sh/3qu6j.png


1 commentaires

Vous ne devriez jamais télécharger des dlls et les exécuter sur un autre ordinateur. De nombreuses DLL sont spécifiques aux versions de divers autres composants sur un système. Certains doivent être enregistrés. Certains doivent être installés dans des ensembles. Supprimez les DLL que vous avez téléchargés, indiquez-nous quelles dlls vous manquent et nous vous dirons la bonne façon de les installer.


5 Réponses :


10
votes

Plus que probablement, ces ordinateurs n'ont pas besoin de la bibliothèque QT requise que votre programme utilise. Voir le tutoriel ici: http://doc.qt.io/qt-5 /windows-deployment.html

Une autre vérification facile serait d'installer QT sur un autre ordinateur, déplacez votre .exe sur et voyez s'il est exécuté. Si c'est le cas, vous n'avez certainement pas déployé votre application correctement.

édité pour ajouter ce lien utile car cela semble être exactement le même problème que les gens voient: https://bugreports.qt.io/browse/qtbug-28766


7 commentaires

J'essaie d'exécuter la première commande Configuring -Static, mais cela dit Perl introuvable dans Enviornment - ne peut pas exécuter Syncqt. Où dois-je installer Perl afin de le faire fonctionner?


Honnêtement, je ne suis pas sûr, mon expérience avec qt est limitée. Cependant, votre problème pourrait également mentir au fait que vous copiez manuellement les DLL de l'ordinateur à l'ordinateur.


Si la bibliothèque QT manque, elle dit généralement quelque chose comme «le programme ne peut pas démarrer car votre ordinateur n'a pas de qtcore.dll» ou autre. Cela semble être différent.


Nous avons eu le même problème, résolu avec la fourniture de bibliothèques partagées supplémentaires décrites dans ma réponse.


Le lien de bogue a été très utile - j'ai fait des enquêtes et j'ai constaté qu'il s'agissait d'un bug de Qt. Voir mon commentaire sur ce bogue pour plus d'informations. (Ou ma réponse à cela donc question.)


@Timmmm, jetez un coup d'œil à la poste de Francois Colas à partir de ce lien, il semble être exactement la même chose que vous rencontrez. Le correctif est là dans le lien.


Son correctif n'a pas fonctionné pour moi. J'ai trouvé le vrai problème si j'ai décrit dans ce commentaire: BUGREPORTS.QT-PROJEJECT.ORG/BROWSE/.../a>



5
votes

Si vous avez Cygwin installé, vous pouvez exécuter ldd ​​ et voir la liste des bibliothèques requises par votre application. Après avoir fait copier votre exe dans un autre dossier et des bibliothèques qui y sont requises.

Cela devrait être correct pour la licence LGPL, mais je ne suis pas un avocat, veuillez donc consulter des personnes plus intelligentes qui connaissent des problèmes juridiques.


1 commentaires

Le problème ne manque pas les DLL manquantes dans ce cas, comme indiqué dans la question. Vous pouvez également utiliser la dépendance Walker au lieu de LDD.



5
votes

Vous déployez une application compilée MINGW, cela vous oblige également à fournir les fichiers DLL suivants, en plus de la DLL QT-DLL utilisée dans votre application:

icudt51.dll
icuin51.dll
icuuc51.dll
libstdc++-6.dll (eventually)
platforms/qminimal.dll
platforms/qwindows.dll
libgcc_s_dw2-1.dll (eventually)


7 commentaires

Ils sont fournis! Comme indiqué dans la question et tous mes commentaires. De plus, je ne pense pas que vous ayez besoin de qminimal.dll ou qwindows.dll. Du moins pas pour mon programme QT. Le problème est quelque chose à voir avec qt. Le programme ne se bloque pas tant que vous ne créez aucune fenêtre.


Donc, vous dites que vous n'avez pas besoin de qwindows.dll, mais votre programme se bloque lorsque vous ouvrez une fenêtre. Hmmmm ...


Essayez de fournir les DLL données données ... également les mettre dans le dossier Platforms. Nous avions le même problème et l'a résolu en utilisant la fourniture des DLL dans des plates-formes de sous-dossiers


@Sebastianlange C'est également la solution du deuxième lien de ma réponse. Je suis assez confiant que c'est ce qui se passe.


Vous devez vous arrêter qwindows.dll (mais pas qminimal.dll ). Cependant, il existe un bogue dans Qt qui l'empêche de trouver en réalité qwindows.dll sauf dans le chemin de recherche codé dur ( c: \ qt \ 5.1.0 .... ). Vous êtes censé être capable d'utiliser qt.conf pour le dire où regarder mais cela ne fonctionne pas comme annoncé. Il est possible que ce bogue soit spécifique à la version, c'est pourquoi les gens voient différents comportements. J'utilise Qt 5.1.0-RC1.


@Timmmm vous manquait donc une DLL (quelle que soit la raison pour laquelle vous vous manquiez). Bien sûr, c'est un problème avec QT, mais c'est ce que le lien que j'ai posté explique. Cela explique pourquoi votre "Hello World" a travaillé, mais pas le cas où vous avez construit une fenêtre.


Bien techniquement, je ne manquais pas une dll - qt ne le cherchait pas au bon endroit! : P




0
votes

Ceci est un bogue sous Windows:

https: //bugreports.qt- projet.org/browse/qtbug-28766

Spécialement, qt recherche uniquement qwindows.dll (qui est requis malgré ce que dépend.exe dit - il est chargé de manière dynamique) dans le chemin absolu codé dur qu'il est installé sur votre machine de développement, c'est-à-dire C: \ qt \ ..... \ plugins \ plates-formes . Il y a un fichier appelé qt.conf que vous êtes censé pouvoir utiliser pour changer les chemins de recherche, mais cela ne fonctionne pas.

Heureusement, Joost Bloemen a eu une solution de contournement dans ce rapport de bogue: xxx

puis mettez qwindows.dll ( vous n'avez pas besoin qminimal.dll ) Dans un sous-répertoire de votre EXE appelé plates-formes . (Vous pouvez le mettre dans . \ Plugins \ plates-formes à la place si vous le souhaitez, il vous suffit de changer dir.absolutepath () à Dir.absolutepath () + "/ plugins" ci-dessus.


0 commentaires