7.2. Compilation de GCC

La plupart des distributions sont fournies avec le compilateur GNU C/C++. Cependant, la version fournie n'est pas forcément la dernière version stable de GCC. En effet, la version installée par défaut est généralement une ancienne version, qui est donc obsolète ou, pire encore, il s'agit franchement d'une version de développement non stabilisée. C'est en particulier le cas des distributions Redhat et dérivées, comme la Mandrake par exemple, qui installent les « versions » 2.96 ou 2.97 de GCC, versions qui n'ont jamais existé !. Il est donc recommandé de systématiquement mettre à jour le compilateur avec la dernière version stable officielle de GCC. Dans le cas des distributions Redhat et dérivées toutefois, il vaut mieux s'en abstenir car les bibliothèques de programme de la distribution dépendent elles-mêmes de cette version (cela est tout particulièrement vrai pour les programmes qui utilisent la librairie standard C++).

Cependant, bien que l'installation de GCC soit recommandée, ce n'est pas une chose plaisante à faire. Il est légitime de se poser quelques questions sur l'intérêt de cette opération. La première est bien entendu : « Quel est l'intérêt d'installer la dernière version de GCC pour celui qui ne veut pas programmer ? ». Eh bien tout simplement de ne pas avoir de problèmes avec des programmes récents dont seuls les sources sont disponibles. Il est probable qu'un jour ou un autre vous trouviez des sources qui ne compilent tout simplement pas avec la version de GCC fournie avec votre distribution. Dans ce cas, vous serez obligé d'installer la dernière version de GCC, alors autant le faire tout de suite. Une autre question peut survenir, surtout si vous avez entendu parler de rumeurs peu rassurantes concernant des bogues dans les dernières versions de GCC. Par exemple, la compilation du noyau avec un compilateur bogué comporte des risques certains d'instabilité du système. En fait, la dernière version réellement utilisable de GCC est la 2.95.3. La version 3.0.3, bien qu'officielle, comporte encore des bogues graves qui la rendent difficilement utilisable. En particulier, cette version est susceptible de générer du code faux lors de la compilation du noyau, et est incapable de compiler correctement un grand nombre de programmes C++, dont l'environnement de bureau KDE. Par conséquent, ce document ne traitera pour l'instant que de la compilation et de l'installation de la version 2.95.3 de GCC.

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.

Certaines documentation référencent également la version 1.1.2 du compilateur EGCS (abréviation de « Experimental GNU Compilation System »). Ces documentations sont erronées et EGCS ne doit plus être utilisé. Il s'agit de la version de développement de GCC 2.95, qui est donc à présent complètement obsolète.

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-2.95.3.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 disposez 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

archive est le nom de l'archive comprimée contenant ces sources. Dans notre cas, ce doit être gcc-2.95.3.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 fortement conseillé de passer l'option --enable-shared, qui permet d'utiliser les bibliothèques dynamiques. Il est également recommandé de fournir l'option --enable-threads, qui permet d'activer le support du multithreading pour le langage Objective C (c'est un langage objet dérivé du C, géré par GCC en marge du C++ et qui n'est pas très courant, mais suffisamment utilisé pour qu'on ne puisse pas s'en passer). Ces fonctionnalités étant disponibles sous Linux, autant les utiliser.

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-shared --enable-threads --host=hôte

hôte est de la forme « ix86-pc-linux-gnu ».

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 150 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 librairie standard C++.