7.2. Compilation de GCC

La clef de vo�te du processus de compilation est bien entendu la suite de compilateurs GCC du projet GNU. Cette suite comprend un compilateur pour les languages C, C++, Objective C, Fortran, Java et Ada. La plupart des distributions fournissent ces outils sur leur CD d'installation, mais ne les installent pas par d�faut. Il est toutefois recommand� d'installer au moins le compilateur C/C++ et les outils de d�veloppement associ�s, ainsi que les fichiers d'en-t�te des biblioth�ques de base du syst�me (biblioth�que C, en-t�tes de XWindow, des biblioth�ques utilitaires et des biblioth�ques de base des environnements graphiques Gnome et KDE).

Le choix de la version de GCC utilis�e est extr�mement important, car la stabilit� et les performances du syst�me en d�pendront directement. De plus, certains programmes exigeront une version sp�cifique du compilateur pour �tre compil�s, soit parce qu'ils n'ont �t� test�s qu'avec cette version par les d�veloppeurs, soit parce qu'ils utilisent une fonctionnalit� qui n'est disponible que dans les versions r�centes de GCC.

La versions stable de GCC reconnue par le plus grand nombre de d�veloppeurs est sans aucun doute la version 2.95.3. Cette version ne posera certainement pas de probl�mes aux possesseurs de PC � base de processeur x86. Cependant, elle souffre de quelques d�fauts :

C'est pour ces raisons que certaines distributions sont diffus�es avec des versions plus r�centes de GCC qui, malheureusement, n'ont pas atteint le niveau de stabilit� de la version 2.95.3. En fait c'est m�me relativement catastrophique, car la version utilis�e est franchement une version de d�veloppement stabilis�e pour l'occasion (c'est en particulier le cas des distributions Redhat et d�riv�es, comme la Mandrake par exemple, qui utilisaient encore r�cemment les � versions � 2.96 ou 2.97 de GCC, versions qui n'ont jamais exist� !). Le choix de ces compilateurs a malheureusement rendu incompatibles les paquetages binaires de ces distributions avec ceux des autres et, il faut l'admettre, ne r�gle pas le probl�me de la stabilit� du compilateur.

Le probl�me provient du fait que la branche officielle de GCC, qui est issue du d�veloppement des versions 2.96 et 2.97, souffrait de bogues graves et n'�tait pas utilisable. Ainsi, les versions 3.0.x (jusqu'� la version 3.0.4 comprise) doivent �tre �vit�es � tout prix. Les versions des derni�res branches officielles (c'est-�-dire les branches 3.1.x et 3.2.x) fonctionnent � pr�sent sans probl�me et sont donc utilisables. Notez que la branche 3.2.x est issue de la version 3.1.1 et n'a comme seule diff�rence que la correction d'erreurs dans les interfaces binaires des programmes C++, ce qui la rend incompatible binairement et justifie le changement de num�ro de version mineur. La branche 3.2.x est en voie d'acceptation et la plupart des distributions sont en train de migrer vers cette version du compilateur ou l'ont d�j� fait. Comme il est pr�vu que les versions post�rieures soient compatibles au niveau du code binaire g�n�r�, cette migration r�soudra sans doute les probl�mes d'incompatibilit�s binaires entre les paquetages des diverses distributions.

En pratique, il est recommand� de se cantonner � la version 2.95.3, ou de passer franchement � la branche 3.2.1 (il est inutile de passer par la branche 3.1.x, et la version 3.2.0 ne compile pas avec les versions r�centes de la biblioth�que C). Les possesseurs de distributions Redhat et d�riv�es s'abstiendront certainement de faire une mise � jour manuelle, car les biblioth�ques de leur distributions seraient incompatibles avec les versions officielles de GCC. Dans leur cas, il faut faire une mise � jour compl�te de leurs distributions.

Note�: En ce qui concerne les num�ros de version, il faut savoir que le dernier chiffre caract�rise souvent le num�ro de correctif. Plus ce chiffre est �lev�, moins le programme a de chances de comporter de bogues. En pratique, on �vitera g�n�ralement d'installer syst�matiquement les derni�res versions des logiciels lorsque ces versions sont les premi�res d'une nouvelle s�rie. Ainsi, un programme de version x.y.0 est certainement peu fiable. Il faudra attendre au moins la version x.y.1 ou mieux la x.y.2, pour pouvoir l'utiliser sereinement. Sachez �galement que le num�ro interm�diaire sert, pour certains logiciels, � indiquer les versions de d�veloppement. C'est par exemple le cas du noyau de Linux, pour lequel les num�ros de version impairs correspondent aux versions de d�veloppement et les num�ros pairs aux versions stables. Ce n'est pas le cas pour la biblioth�que C ou GCC. On notera que GCC 3.2.0 correspond en fait � une version 3.1.1 avec un nouveau format binaire pour le C++, et n'est donc pas � proprement parler une nouvelle version.

Certaines documentations r�f�rencent �galement la version 1.1.2 du compilateur EGCS (abr�viation de � Experimental GNU Compilation System �). Ces documentations sont obsol�tes : EGCS ne doit plus �tre utilis�. Il s'agit de la version de d�veloppement de GCC 2.95, qui est donc � pr�sent relativement ancienne.

7.2.1. Pr�requis

� moins que vous ne r�ussissiez � mettre la main sur une version de GCC d�j� compil�e pour Linux, vous ne disposerez que des sources. Les sources de GCC peuvent �tre r�cup�r�es sur Internet sur le site de GCC. Ces sources sont fournies sous la forme d'une archive au format tar-gzip. Le nom de cette archive est � gcc-3.2.1.tar.gz �.

Un autre pr�requis est bien entendu que vous disposiez �galement d'un compilateur C sur votre syst�me. Ce compilateur peut tr�s bien �tre une ancienne version de GCC, mais il est imp�ratif de disposer d'un compilateur C correct. Le code de GCC a �t� �crit pour pouvoir �tre compil� de mani�re minimale avec la plupart des compilateurs C existants. Il faut �galement que ce compilateur porte le nom de � cc � ou � gcc � et soit dans l'un des r�pertoires de la variable d'environnement PATH, ou que la variable CC ait �t� d�finie avec le chemin absolu du compilateur.

7.2.2. Installation des sources

Lorsque vous aurez install� le compilateur C natif de votre syst�me, vous devrez d�comprimer les sources de GCC. Cela doit se faire avec la commande suivante :

tar xvfz archive

o� archive est le nom de l'archive comprim�e contenant ces sources. Dans notre cas, ce doit �tre gcc-3.2.1.tar.gz. Cette commande a pour cons�quence de cr�er l'arborescence des r�pertoires des sources de GCC dans le r�pertoire o� elle a �t� ex�cut�e.

Une fois cette op�ration effectu�e, il est conseill� de cr�er un autre r�pertoire, ailleurs que dans le r�pertoire des sources de GCC, dans lequel la compilation aura lieu. Dans toute la suite, nous supposerons que le r�pertoire des sources se nomme srcdir, et que le r�pertoire de compilation se nomme objdir.

7.2.3. Configuration

L'�tape suivante est d'aller dans le r�pertoire de compilation et de lancer le programme de configuration de GCC dans ce r�pertoire. Cela peut �tre r�alis� avec les commandes suivantes :

cd objdir
srcdir/configure [options]

Comme on l'a vu ci-dessus, le programme de configuration configure peut recevoir des options en ligne de commande. Il est recommand� de fournir l'option --enable-__cxa_atexit, qui permet de rendre GCC compatible avec la version 3 de la norme inter-vendeurs sp�ciant le format des interfaces binaires pour les compilateurs C++, et donc de garantir la compatibilit� binaire ascendante avec les versions futures de GCC. Cela vous permettra d'�viter d'avoir � recompiler toutes les biblioth�ques C++ lors des mises � jours ult�rieures de GCC. Il est �galement recommand� d'utiliser l'option --enable-long-long, qui ajoute le support du type de donn�es long long, qui permet de manipuler des donn�es 64 bits sur les machines 32 bits comme les PC.

Normalement, le programme de configuration d�tecte le type de machine et le syst�me utilis�. Cependant, cette d�tection peut �chouer si les types de machines indiqu�s pour les diff�rents composants du syst�me ne sont pas identiques. Dans ce cas, il vous faudra sp�cifier la machine h�te � l'aide de l'option --host. La ligne de commande pour la configuration sera alors la suivante :

srcdir/configure --enable-__cxa_atexit  \
    --enable-long-long --host=h�te

o� h�te est de la forme � ix86-pc-linux-gnu �.

Le nombre de compilateurs fournis avec la suite de compilateurs GCC est impressionnant. Cependant, seuls les compilateurs C et C++ sont r�ellement essentiels. Aussi est-il possible de ne prendre en charge que certains langages � l'aide de l'option --enable-languages. Cette option doit �tre suivie des noms des langages pour lesquels le compilateur doit �tre cr��, s�par�s par des virgules. Ainsi, on peut n'installer que les compilateurs C/C++ et Java en ajoutant l'option suivante � la ligne de commande :

--enable-languages=c,c++,java

Enfin, si votre distribution utilise le compilateur GCC comme compilateur de base du syst�me, et que vous d�sirez remplacer la version de votre distribution par la version que vous allez compiler, il faut changer le r�pertoire d'installation de GCC. Normalement, GCC s'installe dans le r�pertoire /usr/local/ ce qui fait qu'il ne remplace pas la version de votre distribution. Vous devez donc sp�cifier les r�pertoires de base pour l'installation. Pour cela, il suffit d'ajouter les options suivantes :

--prefix=/usr

� la ligne de commande de configure.

7.2.4. Compilation

La compilation de GCC peut ensuite �tre r�alis�e. Autant vous pr�venir tout de suite : c'est une op�ration tr�s longue, qui de plus demande beaucoup d'espace disque. Il faut au moins pr�voir 200 Mo d'espace disque, et une bonne demi-heure sur une machine � 500 Mhz. Cela est d� � la technique employ�e par GCC lors de la compilation. La plupart des compilateurs C ne sont pas capables de compiler GCC avec toutes ses fonctionnalit�s. C'est pour cela que la compilation se passe en trois �tapes :

Ainsi, GCC se compile lui-m�me !

Ces trois op�rations peuvent �tre ex�cut�es � l'aide d'une seule commande :

make bootstrap

Cette commande doit �tre ex�cut�e � partir du r�pertoire de compilation objdir.

7.2.5. Installation de GCC

Lorsque la compilation s'est termin�e, vous pouvez installer GCC. Il est recommand� de supprimer le compilateur que vous avec utilis� pour compiler GCC, sauf si, bien entendu, il s'agissait d�j� de GCC. En effet, il n'est pas n�cessaire de le conserver, puisque vous utiliserez d�sormais GCC. L'installation de GCC est, encore une fois, tr�s simple :

make install

Cette commande installe GCC ainsi que la biblioth�que standard C++.