7
votes

Courir .exe sans qt

[ Solution ]

je veux exécuter mon application créée avec qtsdk sur une machine qui n'a pas qt installé.

J'ai essayé de Copiez le dossier DLL DLL BIN de la version de mon projet, mais cela n'a pas fonctionné.

J'ai essayé ce qui suit:
  • i copine tout dll dll d: \ qt \ qt5.0.1 \ 5.0.1 \ mingw47_32 \ bin
  • et collé dans le dossier de mon projet: d: \ projects \ myBrowser \ myBrowser-build-butintop_qt_5_0_1_mingw_32bit-libération \ version
  • et envoyez-le à un autre ordinateur sans qt
  • dans l'ordinateur sans qt , j'ai installé vcredist_sp1_x86.exe browrsertest.exe

    L'erreur suivante s'est produite:

    bibliothèque d'exécution Microsoft Visual C ++: Cette application a demandé le temps d'exécution pour la mettre fin à une manière inhabituelle

    Q: Qu'est-ce que je veux vraiment savoir:

    Comment exécuter une application intégrée à Qt sur d'autres ordinateurs (Windows) sans Qt installé? < / p>

    Détails:
    • qt5.0.1 32bit
    • MINGW 4.7 32bit
    • QTCreator 2.6.2
    • Windows 7 64bit.
    • Intel I5

      dossiers:

      • d: \ qt \ qt5.0.1 \ 5.0.1 \ mingw47_32
      • d: \ qt \ qt5.0.1 \ outils \ mingw

        qt / mingw:

        • d: \ qt \ qt5.0.1 \ 5.0.1 \ mingw47_32 \ bin \ qmake.exe
        • d: \ qt \ qt5.0.1 \ outils \ mingw \ bin \ gcc.exe

          fichier .pro : xxx

          Si des informations que vous avez manquées, veuillez me le faire savoir. reconnaissant


5 commentaires

Si un PC ciblé manquait toutes les DLL, le message d'erreur aurait dit de manière explicite ... Maintenant, il semble que vous trouve un bogue dans votre code (section de découverte de détails dans cette boîte de dialogue d'erreur).


J'ai créé une application (qmainwindow) simple et la même erreur se produit. J'ai édité ma question, j'attends votre retour. Merci.


Mingw, Visual Studio? C'est soit Mingw ou Visual Studio, comment vous pouvez-vous avoir besoin des deux?


Vous aurez également besoin d'une DLL à partir du D: \ qt \ qt5.0.1 \ lib et d: \ qt \ qt5.0.1 \ plugins . J'utilise habituellement Moniteur de processus pour trouver des dépendances manquantes.


Assurez-vous de ne pas mélanger des compilateurs ni de libérer et de déboguer dans la même application. Ce que je veux dire, c'est ne pas construire des dlls avec 1 compilateur et exécutables avec un compilateur différent, différentes versions du compilateur ou de certaines parties de la libération, tandis que d'autres pièces déboguées. Ce sont toutes des recettes pour des accidents dues à un CRT incompatible. Le plus important est des tas différents et incompatibles. Vous ne pouvez pas attribuer la mémoire dans un tas de débogage et la libérer dans un tas de libération.


3 Réponses :


2
votes

"Microsoft Visual C ++ Runtime Library: Cette application a demandé à l'exécution de le terminer de manière inhabituelle"

C'est soit un bug ordinaire, soit parfois un mélange de dlls incompatibles
Utilisez le (gratuit) dépend programme sur votre EXE pour vérifier quelle DLLS il utilise réellement - cela ne relie probablement pas TOUTES QT

Certaines libs QT sont chargées à l'exécution d'un dossier des plugins, principalement des formats d'image et des connexions de base de données - mais ils ne donnent pas cette erreur


1 commentaires

J'ai réussi à réparer les DLL, mais j'ai toujours cette erreur: Avertissement: au moins un module a une importation non résolue en raison d'une fonction d'exportation manquante dans un module dépendant de la charge retardée. . Il semble que le problème soit dans la DLL ieframe.dll , j'ai essayé d'utiliser le walker de dépendance à ieframe.dll mais la même erreur est survenue. Qu'est ce que ça pourrait être? Merci.



11
votes

Pour distribuer votre application, vous devez copier les dlls (uniquement les DLL nécessaires).

  1. copier les dll nécessaires à partir de : \ qt \ qt \ << version_qt> \ mingw \ ou : \ qt \ qt \ \ bin \

    par exemple.: c: \ qt \ qt5.2.0 \ 5.2.0 \ mingw48_32 \ ou c: \ qt \ qt5.2.0 \ 5.2. 0 \ mingw48_32 \ bin

  2. coller le dossier de votre application.

  3. Copiez les dossiers à l'intérieur de : \ qt \ qt \ << version_qt> \ mingw

    EG.: C: \ qt \ qt5.2.0 \ 5.2.0 \ mingw48_32 \ plugins

  4. coller les dossiers de votre application.

    Remarque: Dans cet exemple (ci-dessous), il était nécessaire de copier des DLL de différents endroits et de supprimer les dlls de débogage (utilisés uniquement pour compiler dans débogage ). < / p>

    Notez que le DLLS de débogage fin avec "d.dll", par exemple: qt5core.dll et qt5corepor.dll ou ou > Qt5concurrent.dll et qt5concurrentd.dll , la fin avec "d.dll" ne doit pas être copiée.

    La structure doit ressembler à ceci (exemple):

    • c: \ project \ app.exe (Votre application créée dans qt )
    • c: \ projet \ qt5core.dll ( dll de dossier qt / mingw ou qt / mingw / bin ) ) )
    • C: \ Project \ Platforms ( Dossier de Qt / Mingw / Plugins Dossier)
    • c: \ projet \ plateformes \ qminimal.dll ( dll de qt / mingw / plugins / plates-formes dossier)

      Seulement des dlls le mingw sera nécessaire, alors je recommande d'utiliser Walker de dépendance 2.2

      Le résultat doit ressembler à ceci (toutes les DLL ne sont pas nécessaires, cela peut varier selon le type de projet): > </ p>

<hr>

<p> Merci à: </ p>

<ul>
<li> <p> +1 pour @Martinbeckett, m'a montré le programme de trouver les DLL <forts> </ forts> requis. </ p> </ li>
<li> <p> +1 pour @wouterhuystruit, grâce à l'application que j'ai indiquée, j'ai découvert que le contenu du dossier <FORT> MINGW \ plugins </ strong> doit aller directement dans le dossier d'application. </ P> < / li>
<li> <p> @wouterhuystruit Je considérerais votre réponse comme correct, mais que vous venez de dire, donc j'ai mis une explication plus simple. Merci quand même. </ P> </ li>
</ ul>                                </div>

                                                                    <hr>
                                    <!-- comments -->
                                    <div class= 1 commentaires

      Merci d'être le premier résultat de recherche que j'ai trouvé cela spécifie clairement où les DLL devaient venir de!



0
votes

windeployqt (livré avec QT 5.2+) devrait faire (la plupart du temps?) du travail


0 commentaires