Déployer une application Qt

Cet article a été transféré sur mon wiki, il ne sera pas mis à jour sur ce blog. Je recommande de lire la nouvelle version sur la page suivante : Déployer une application Qt.

J’ai l’impression d’avoir répondu à cette question une bonne dizaine de fois ces deux dernières semaines. J’en parle également dans ma vidéo Installation et premier pas avec Qt 5.2 sur Windows, mais je crois qu’il faut que je détaille un peu plus.

La problématique

Lorsque l’on lance l’exécution d’une application dans Qt Creator, celui-ci utilise le kit de compilation sélectionné pour lancer l’application. Cela nécessite aucune manipulation particulière. Par contre, si on lance l’application directement dans le navigateur de fichiers, on obtient un message d’erreur signalant qu’il manque des bibliothèques dynamiques (.dll dans Windows, .so dans Linux). Il faut donc fournir ces fichiers avec votre application pour pouvoir la lancer sur un autre ordinateur. Le plus simple est de copier (attention, « copier », pas « déplacer » sinon vous ne pourrez plus exécuter vos applications dans Qt Creator) ces fichiers dans le répertoire de l’application. Il existe d’autres méthodes (paquets, dépôts, redistribuables, etc.), ça fera l’objet de plusieurs autres articles.

Pour commencer

La page d’aide de la documentation de Qt est la suivante : Deploying Qt Applications.

La première chose à faire est de compiler votre application en mode Release. Pour cela cliquez sur l’icône d’ordinateur en bas à gauche dans Qt Creator (au-dessus du triangle vert).

Choix du kit et du mode de compilation

Choix du kit et du mode de compilation

L’application sera créée par défaut (shadow build) dans un répertoire spécifique, contenu dans le même répertoire que les sources. Le nom du répertoire dépend du kit utilisé et contient le terme « release ».

Par exemple, pour une application nommée « test » utilisant Qt 5.2 et compilée avec MingW 4.8 en mode release, le répertoire sera : build-test-Qt_5_2_0_MingW_4_8-Release.

Répertoires créés par les compilations selon les kits

Répertoires créés par les compilations selon les kits

Où trouver ces fichiers ?

Vous pouvez trouver les fichiers demandés dans plusieurs répertoires. Par exemple, sous Windows, dans le système (C:\windows par exemple) ou dans le répertoire de Qt Creator (C:\Qt\Tools\QtCreator\bin pour une installation de Qt par défaut).

Il ne faut surtout pas utiliser ces fichiers !

Il faut utiliser les mêmes fichiers que ceux utilisés pour la compilation. Une compilation est définie par un kit et il existe plusieurs kits possible (selon votre installation de Qt). Un kit est défini par :

  • le compilateur : MingW ou Microsoft Visual C++ (MSVC) sur Windows, GCC sur Linux ;
  • la version de compilateur : 4.7 ou 4.8 pour MingW/GCC (ou antérieur si vous utilisez Qt 4), 2011 (MSVC 10) ou 2012 (MSVC 11) pour Visual C++ ;
  • 32 ou 64 bits ;
  • DirectX ou OpenGL (uniquement pour Visual C++).
  • la version de Qt : Qt 5.2, Qt 5.1.1, etc.

Il faut bien identifier le kit que vous utilisez pour la compilation, les fichiers nécessaires pour l’exécution en dépend. Ces fichiers sont dans le répertoire suivant pour une installation de Qt par défaut : C:\Qt\version_Qt\version_compilateur\bin. Par exemple, pour Qt 5.2 avec MingW 4.8 32 bits, le répertoire est : C:\Qt\5.2.0\mingw48_32\bin.

Certains modules de Qt nécessite l’utilisation de plugins, par exemple pour les images (JPEG, GIF, SVG, etc.) ou les bases de données. Les fichiers se trouvent dans le répertoire C:\Qt\version_Qt\version_compilateur\plugins\nom_module. Par exemple, pour les images avec Qt 5.2 et MingW 4.8 32 bits, les fichiers sont dans C:\Qt\5.2.0\mingw48_32\plugins\imageformats.

Quels sont les fichiers à copier ?

Cela dépend également du kit et des modules Qt utilisés.

Avec MingW :

  • libgcc_s_dw2-1 ;
  • libstdc++-6 ;
  • libwinpthread-1 (pour Windows uniquement).

Avec Microsoft Visual C++ :

  • msvcr100.dll (MSVC 10) ou msvcr110.dll (MSVC 11). Ces fichiers sont dans le système (C:\windows\system32), ils ne sont pas installés par Qt, mais par le SDK de Microsoft Visual C++. Pour des raisons de licences, il n’est pas autorisé de donner directement ce fichier (je crois), il faut donner le redistribuable de Visual C++ (pour 2010 ou 2012).

Si vous utilisez DirectX (c’est-à-dire les versions Visual C++ non OpenGL), il faut la bibliothèque ANGLE :

  • libEGL.dll ;
  • libGLESv2.dll ;
  • d3dcompiler_XX.dll (dans C:\windows\system32, sera fournit par Windows en général).

Le support de l’Unicode avec ICU (version 51 chez moi) :

  • icudt51 ;
  • icuin51 ;
  • icuuc51.

Pour les modules Qt, il faudra :

  • Qt5Core au minimum ;
  • Qt5Gui si vous créez une application graphique ;
  • QtWidgets pour une application C++/widgets ;
  • QtNetwork, Qt5Qml et Qt5Quick pour les applications Qt Quick ;
  • pour chaque module Qt : Qt5Xxx, avec Xxx le nom du module (Qt5Multimedia pour le module multimédia, Qt5OpenGL pour la 3D avec OpenGL, Qt5Webkit pour Webkit, etc.)
Liste finale des fichiers nécessaires

Liste finale des fichiers nécessaires

Les fichiers de plateforme

L’une des plus grosses évolutions de Qt 5 par rapport à Qt 4 est la création du Qt Platform Abstraction (QPA, voir ou ). Ce changement, peut visible pour l’utilisateur lambda puisqu’il s’agit d’un changement d’architecture interne à Qt, a permis de rassembler toutes les fonctionnalités spécifiques à une plateforme dans un plugin. Tout le reste du code de Qt est donc indépendant de la plateforme. Cette approche permet de porter facilement Qt sur différentes plateformes, il suffit « simplement » de créer un nouveau plugin.

Si j’en parle dans cet article, c’est que cela va avoir une importance pour le déploiement. Il va falloir fournir les fichiers du plugin correspondant à votre plateforme. Ces fichiers se trouvent dans le répertoire C:\Qt\version_Qt\version_compilateur\plugins\platforms. Il faut mettre ces fichiers dans un sous-répertoire platforms dans le répertoire de votre application.

Pour Windows, il faudra copier le fichier qwindows.dll. Pour Linux et Android, il n’y a pas d’autres fichiers à copier. Pour les autres plateformes, je ne sais pas, n’hésitez pas à tester et à vérifier dans la documentation.

Pour terminer

Vous pouvez supprimer les fichiers temporaires de compilation (xxx.o et moc_xxx.cpp).

Si vous rencontrez des problèmes avec le déploiement, vous pouvez expliquer vos difficultés sur le forum QtFr.org, en précisant :

  • le kit utilisé ;
  • où vous avez trouvé vos fichiers ;
  • les modules Qt utilisés.

Bon courage.

Mise à jour

  • 15/02/2014 : ajout du chapitre sur le QPA, suite à une remarque de John jon.
Publicités

4 commentaires sur « Déployer une application Qt »

  1. Bonjour

    Merci pour cet excellent post. Sur mes applications Qt 5.2 avec Visual 2010, il faut par contre que je livre également le répertoire « platforms » fourni dans l’installation de Qt ; sans cela ça ne fonctionne pas.

  2. Merci pour ce petit document 100% utile. Après passage de 4.8 à 5.2.1, je butais sur les deux dll manquantes LibEGL et LibGLESv2.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s