Cross-compilation de Qt4

Thibaut Cuvelier

Vous avez votre chaîne de compilation, votre librairie standard, mais vous voulez compiler des applications utilisant Qt. Suivez ce guide, il vous mènera au bout.

N'hésitez pas à commenter cet article !
Commentez

- Titre : Cross-compilation de Qt4

- Auteur : Thibaut Cuvelier

- Parution : 12 février 2009

- Mise à jour : 9 janvier 2011

- Licence : Copyright ® 2009 Thibaut Cuvelier. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Introduction

- I-A. Qt

- I-B. Le moc

- II. La configuration

- II-A. Plateforme

- II-A-1. IBM AIX

- II-A-2. *BSD

- II-A-3. Darwin

- II-A-4. HP-UX

- II-A-5. HP-UX 11i

- II-A-6. GNU Hurd

- II-A-7. Irix

- II-A-8. Linux

- II-A-9. LynxOS

- II-A-10. MacOS X

- II-A-11. SCO

- II-A-12. Solaris et OpenSolaris

- II-A-13. Microsoft Windows

- II-B. Release ou debug

- II-C. Statique ou dynamique

- II-D. Exceptions

- II-E. Accessibilité

- II-F. STL

- II-G. Module SQL

- II-H. Librairies additionnelles

- II-I. Uniquement pour Windows

- II-I-1. Projets

- II-I-2. QMake

- II-I-3. RTTI

- II-I-4. Extensions processeur

- II-I-5. Frameworks additionnels

- III. La compilation

- IV. Conclusion

I - Introduction

I-A - Qt

La bibliothèque Qt est constituée de composants, de modules, qui permettent de gérer très simplement l'interface graphique (GUI), l'accès aux données (fichiers, bases de données ...), les connexions réseaux ...

Qt a un but : unifier le développement entre toutes les plateformes, ce qui permet d'uniquement recompiler son code pour changer d'architecture ou de plateforme. C'est pourquoi il est porté sur diverses architectures : Windows, Mac OS et UNIX (et ses dérivés, dont Linux).

La caractéristique principale de Qt qui lui permet d'être si connu est d'être utilisé au sein de KDE, un environnement graphique pour Linux (et, maintenant, pour Windows et Mac OS X). Grâce au cross-compilateur, vous pourrez compiler KDE et le lancer nativement sur, par exemple, une PS3 (une machine très puissante, mais impossible à utiliser directement pour de la compilation).

Je ne proposerai pas de téléchargement, j'ai effectué l'opération à l'aide d'une version commerciale de Qt, dont je ne peux distribuer les fichiers (même compilés, ou passés à n'importe quelle moulinette).

I-B - Le moc

C'est cet outil, précisément, qui vous interdit d'utiliser les mêmes fichiers que pour Linux en natif. En effet, Windows n'est pas (encore ?) capable de lancer ces fichiers et moc doit être utilisé pour chaque compilation d'un programme avec Qt.

II - La configuration

La commande de base :

configure -xplatform linux-g++

Voyez dans les sections suivantes pour ajouter d'autres options (si nécessaire).

II-A - Plateforme

Vous pouvez remplacer l'argument de -xplatform par un de la liste ci-dessous (classée par système d'exploitation / architecture selon l'ordre alphabétique).
GCC signifie que vous avez besoin de GCC et de G++, dans la même version.
Les suffixes sont en général très explicites : -64 pour un système 64 bits, -32 pour un système 32 bits, 34 pour GCC 3.4, 40 pour GCC 4.0 et autres du même genre.

Vous pouvez aussi utiliser ces drapeaux avec -platform si votre plateforme n'est pas bien reconnue.

II-A-1 - IBM AIX

Pour GCC :

- aix-g++

- aix-g++-64

Pour XLC :

- aix-xlc

- aix-xlc-64

II-A-2 - *BSD

Pour GCC :

- freebsd-g++

- freebsd-g++34

- freebsd-g++40

- netbsd-g++

- openbsd-g++

Pour Intel C++ Compiler :

- freebsd-icc

II-A-3 - Darwin

Pour GCC

- darwin-g++

II-A-4 - HP-UX

Pour aC++ :

- hpux-acc

- hpux-acc-64

- hpux-acc-o64

Pour GCC :

- hpux-g++

- hpux-g++-64

II-A-5 - HP-UX 11i

Pour aC++ :

- hpuxi-acc-32

- hpuxi-acc-64

Pour GCC :

- hpux-g++-64

II-A-6 - GNU Hurd

Pour GCC (évidemment, celui-là et pas un autre) :

- hurd-g++

II-A-7 - Irix

Pour SCI CC :

- irix-cc

- irix-cc-64

Pour GCC :

- irix-g++

- irix-g++-64

II-A-8 - Linux

Pour Compaq C++ (uniquement sur processeur Alpha) :

- linux-cxx

Pour Intel C++ (7.1 et 8.0, autres versions non-testées avec cette directive) :

- linux-ecc-64

Pour GCC :

- linux-g++

- linux-g++-32 (synonyme de linux-g++)

- linux-g++-64

- linux-llvm

- linux-lsb-g++

Pour Intel C++ (10) :

- linux-icc

- linux-icc-32 (synonyme de linux-icc)

- linux-icc-64

Pour Kai C++ (4.0f) :

- linux-kcc

II-A-9 - LynxOS

Pour GCC :

- lynxos-g++

II-A-10 - MacOS X

Pour GCC :

- macx-g++

- macx-llvm

Pour Intel C++ :

- macx-icc

Pour XLC :

- macx-xlc

Pour XCode (configuration spéciale pour cet IDE) :

- macx-xcode

II-A-11 - SCO

Pour CC :

- sco-cc

Pour GCC :

- sco-g++

II-A-12 - Solaris et OpenSolaris

Pour CC :

- solaris-cc

- solaris-cc-64

Pour GCC :

- solaris-g++

- solaris-g++-64

II-A-13 - Microsoft Windows

Avec Cygwin, pour GCC :

- cygwin-g++

Pour Borland C++ :

- win32-borland

Pour GCC / MinGW :

- win32-g++

Pour Intel C++ Compiler :

- win32-icc

Pour Visual Studio :

- win32-msvc

- win32-msvc.net

- win32-msvc2002

- win32-msvc2003

- win32-msvc2005

- win32-msvc2008

II-B - Release ou debug

Une version debug est prévue pour le débugging, pas pour les performances, contrairement à une version release. Si vous générez les deux, ce sera moins d'ennuis pour plus tard, quand vous distribuerez ou débuggerez votre application.

- -debug : uniquement la version debug

- -release : uniquement la version release (ou retail)

- -debug-and-release : les deux

II-C - Statique ou dynamique

Une application liée avec des librairies statiques ne s'encombre pas de fichiers .dll, .dylib ou .so, elle les intègre tous dans son exécutable (plus lourd, ainsi, mais les versions ne peuvent plus être changées par l'utilisateur ... ou vos mises à jour). Cette application pourra utiliser uniquement les plugins qui lui sont liés statiquement, sans pouvoir utiliser le moindre autre.

- -shared : dynamique

- -static : statique

II-D - Exceptions

Cours sur les exceptions.

- -no-exceptions

- -exceptions

II-E - Accessibilité

Les plugins d'accessibilité servent aux personnes déficientes visuellement (un logiciel de lecture peut traiter plus facilement votre application, la traduire en Braille ...), auditivement ... via des standards reconnus et déployés.

- -no-accessibility

- -accessibility

II-F - STL

Active ou pas le support de la STL dans Qt (un conteneur de la STL pourra être utilisé dans Qt).

- -no-stl

- -stl

II-G - Module SQL

- -no-sql-[[pilote]] : pas de support de ce pilote

- -qt-sql-[[pilote]] : support compilé en dur dans QtSQL

- -plugin-sql-[[pilote]] : support lié à l'exécution

Les pilotes suivants sont reconnus, vous devez disposer des en-têtes de la librairie pour pouvoir en compiler le support (libmysql pour MySQL, libpsql pour PostgreSQL ...) :

- mysql

- psql

- oci

- odbc

- tds

- db2

- sqlite

- sqlite2

- ibase

II-H - Librairies additionnelles

- -qt-[[lib]] : utilise la version fournie avec Qt

- -system-[[lib]] : utilise la version du système

- -no-[[lib]] : ne pas utiliser la librairie

Les librairies sont :

- zlib

- libpng

- libmng

- libtiff

- libjpeg

II-I - Uniquement pour Windows

II-I-1 - Projets

- -no-dsp : pas de projets Visual Studio (avant la version 7)

- -dsp : projets Visual Studio (avant la version 7)

- -vcproj : pas de projets Visual Studio (version 7 et supérieures)

- -no-vcproj : projets Visual Studio (version 7 et supérieures)

II-I-2 - QMake

- -no-qmake (très déconseillé, car nécessaire pour une bonne partie de la compilation de Qt !)

- -qmake

II-I-3 - RTTI

Active ou pas la capacité de déterminer le type d'une variable à l'exécution.

- -rtti

- -no-rtti

II-I-4 - Extensions processeur

- -no-mmx

- -mmx

- -no-3dnow

- -no-sse

- -no-sse2

II-I-5 - Frameworks additionnels

- -openssl (OpenSSL, nécessite un SDK supplémentaire)

- -no-dbus

- -dbus (DBus, nécessite un SDK supplémentaire)

- -no-phonon

- -phonon

- -no-phonon-backend

- -phonon-backend

- -no-webkit

- -webkit

Pour compiler OpenSSL et dBus, vous aurez besoin de leurs en-têtes.
dBus peut être désormais utilisé grâce au portage effectué par KDE : regardez ici [ftp://ftp.kde.org/pub/kde/stable/4.2.0/win32/], aux fichiers dbus-[mingw|msvc]-1.2.4-1-[bin-lib-src].tar.bz2 et préférez les fichiers précompilés (bin et lib).

III - La compilation

make
make install

Ici, pas de problème, c'est du connu !

IV - Conclusion

La compilation de Qt 4 pour une autre plateforme se révèle très facile et semblable à une compilation native. Cependant, comme d'habitude en cross-compilation, les binaires produits sont de moins bonne qualité que des binaires natifs. Pourtant, ils fonctionnent. Et la majorité des développeurs n'a pas besoin d'exécutables parfaits et optimisés au maximum.