Complier Qt en Static sous Windows

Lorsque l'on crée une application pour Linux avec Qt on peut être intéressé par la rendre multiplateforme. Sous Linux, Qt est généralement installé par défaut, ou dans le cas contraire facilement installable avec le gestionnaire de paquets systèmes. Mais sous windows, installer Qt est plus compliqué et plus lourd. Ce n'est pas une habitude sous windows de demander d'installer des dépendances. C'est pourquoi il peut être intéressant de compiler Qt en static. Ainsi, lors de la création de l'exécutable avec la version Static, le programme embarquera Qt et vos utilisateurs n'auront absolument pas besoin de l'installer. Voici la démarche.

Mise en oeuvre

Notez que toutes ces opérations se font bien sûr sous Windows.

1. Installation de Qt Dynamique + sources

Installez Qt 5.5 (ou une autre version 5.x selon votre choix et ce qui est disponible) grâce à l'installateur fournit par Qt ici. Il est primordial de sélectionner pour cette version, mingw32 ainsi que les sources, qui seront nécessaires pour la compilation de la version static ensuite. Notez que QtCreator sera installé avec le reste, nul besoin de l'installer à part.

2. Installation des dépendances nécessaires à la compilation

Pour chaque programme, choisissez d'ajouter le programme dans le PATH lorsque cela vous est proposé (cocher la case dans l'installateur). Commencez par installer python en téléchargeant la dernière version 3.x sur leur site. Installez ensuite perl (sous windows ce sera Strawberry-perl). Enfin, installez ruby, en téléchargeant la dernière version de Rubyinstaller depuis leur site. Notez que si vous avez un Windows 64 bits, vous pouvez prendre la version 64 bits de ces programmes (bien que Qt sous windows soit en 32bits avec mingw32).

3. Modifier les mkspecs de Qt pour rendre la compilation static

Ouvrez le fichier C:Qt5.5Srcqtbasemkspecswin32-g++qmake.conf (à adapter selon votre version de Qt), recherchez dans ce fichier la ligne suivante :

QMAKE_LFLAGS            =

et la remplacer apr :

QMAKE_LFLAGS            = -static -static-libgcc
4. Préparation de la compilation :

Ouvrez la console Qt (Menu démarrer --> Tous les programmes --> Qt --> 5.5 --> Qt 5.5 for Desktop (MinGW 4.9.2 32 bit)       [Ceci peut légèrement différer en fonction de votre version de Qt et de MinGW]. Vérifiez que les différentes dépendances sont bien dans le path : Exécuter les commandes suivantes :

python ––version ruby ––version perl ––version

Chaque commande doit vous donner la version et vous ne devez en aucun cas avoir pour réponse que la commande est inconnue : checkDeps Si une commande n'est pas le path, contactez-moi par commentaire pour avoir de l'aide (mais si vous avez bien suivi ce tuto tout devrait aller !).

5. Lancement de la compilation :

Dans la console allez dans le dossier qtbase des sources :

cd C:\Qt5.5\Src\qtbase

Lancez la configuration de la compilation :

configure -static -release -opengl desktop -opensource -platform win32-g++

Répondre y pour accepter la licence. Puis attendre quelques minutes que l'exécution se termine. Quand c'est terminé, lancez la compilation :

mingw32-make sub-src

Attendre que la compilation se termine. Ceci peut prendre plusieurs heures.

6. Configurer Qt Creator pour qu'il utilise la version Qt STATIC

Ouvrez Qt creator. Allez dans les options (Outils --> Options...), dans l'onglet Compiler & Exécuter. Dans l'onglet Versions de Qt, sélectionnez Ajouter... et allez chercher l'exécutable qmake se trouvant dans C:\Qt5.5\Src\qtbase\bin. Dans l'onglet Kits, ajouter un nouveau kit avec la version de Qt précédemment ajoutée : qtcreator

7. Compiler mon application Qt en STATIC

Vous n'avez plus qu'à sélectionné le kit STATIC précédemment ajouté pour votre projet d'application Qt, en mode Release (pas de mode debug en STATIC). Et voilà, vous avez finit ! 🙂

Sources : https://www.youtube.com/watch?v=Oyb20BAgx0U

10 réponses sur “Complier Qt en Static sous Windows”

  1. Bonjour,
    j'ai installé Python, la dernière version sur le site, le téléchargement se fait, l'installation aussi MAIS quand je fais "python --version", ça me le trouve pas. (alors que pour perl et ruby ça marche).
    Donc je me dis, c'est peut-être moi qui foire la commande, donc je vais plus loin, et pour la commande "configure..." ça me met "unable to detect the platform from environment".

    Comment résoudre ce souci s'il vous plaît.? Car la je ne vois vraiment pas...

    Merci d'avance de votre aide.
    Cordialement
    Isodidacte

    1. Bonjour Isodidacte,
      Lors de l'installation de Python, vous n'avez probablement pas coché la case pour ajouter python dans le PATH.
      Pour remédier à cela (sous Windows 7) :
      - Clic droit sur l'icône "ordinateur" de votre bureau (ou bien dans le panel gauche de l'explorateur de fichier)
      - Dans le menu contextuel qui apparaît, sélectionnez "Propriétés"
      - Dans la fenêtre qui s'ouvre : "Paramètres systèmes avancés" (dans la liste de gauche)
      - Dans la fenêtre ainsi ouverte, cliquez sur le bouton "Variable d'environnement..."
      - Dans la partie "Variables système", sélectionner "Path" et cliquez sur "Modifier"
      - Dans le champs "Valeurs de la variable", Ajoutez le chemin complet du dossier contenant l'exéctuable Python (Python.exe), après le dernier point virgule, et ajoutez un point virgule. Validez.
      - Maintenant, si vous tapez python dans le cmd ça devrait fonctionner 🙂

      En espérant avoir pu vous aider ! N'hésitez pas à commenter en cas d'autres problèmes !
      Floréal

        1. Ah oui en effet, je vois le problème, je l'ai déjà eu. Ajoutez ceci à votre configure :
          -platform win32-g++

          Qt n'a pas détecté tout seul que vous êtes sous Windows. Maintenant ça devrait fonctionner 🙂 J'en profite pour l'ajouter dans l'article, ça peut aider d'autres !

          Notez que cette option est correcte également pour compiler Qt sur un windows 64 bits.

          N'hésitez pas à révenir vers moi en cas d'autres problèmes... et bon courage pour la compilation, elle dure quelques heures 😉

          Floréal

          1. C'est chouette, la compilation est en marche, en avant.!
            Merci pour votre aide si efficace 😀
            et si notre discussion peut en aider d'autre ce n'est que mieux 😉

            Cordialement
            Isodidacte

  2. Si je comprends bien, vous utilisez le logiciel unrealupdater ? Car le problème semble complètement lié à ce logiciel et non à Qt lui-même.
    Pour vérifier ceci, pouvez-vous me donner les sorties de compilation de votre logiciel (onglet 4. Sortie de compilation dans Qt creator) ? Et éventuellement une copie d'écran des sorties de l'application.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *