B.3. Compilation de la bibliothèque C 2.3.1

La bibliothèque C constitue l'ensemble des bibliothèques de fonctions que tous les programmes écrits en C utilisent pour accéder aux système. Il s'agit donc d'un composant essentiel dans le système (qui, rappelons-le, est lui-même écrit en C). Recompiler la bibliothèque C est donc une opération très sensible. Vous êtes prévenus.

La compilation de la bibliothèque C est une opération fastidieuse à plus d'un titre. Elle nécessite souvent de recompiler certains outils, et elle est longue et consomme énormément de ressources. Enfin, il faut parfois recompiler certaines parties du système après son installation, afin de résoudre des conflits de versions dus à la migration. La dernière version de la bibliothèque C GNU est la 2.3.1.

Les prérequis sont les suivants :

Note : Contrairement aux anciennes versions de la bibliothèque C, il est inutile de télécharger un add-on pour les fonctionnalités de cryptage de la bibliothèque. Celles-ci sont à présent directement intégrées dans les sources de la glibc.

Le processus de compilation est ensuite assez classique. Il suffit de :

Les options de la commande de configuration permettent l'emploi des bibliothèques dynamiques et la compilation des modules additionnels pour le multithreading. Le répertoire d'installation sera /usr/lib/ pour les bibliothèques, et /usr/include/ pour les fichiers d'en-têtes. Vous pouvez bien entendu utiliser une autre valeur pour l'option --host, selon votre configuration. Normalement, cette option est facultative, car sa valeur est automatiquement détectée par le programme de configuration.

La compilation peut ensuite être lancée avec la simple commande suivante :

make

Une fois la compilation effectuée, vous pouvez tester la nouvelle bibliothèque avant de l'installer. Pour cela, tapez la commande suivante :

make check
Il est vivement recommandé d'effectuer ce test. Si la moindre erreur apparaît pendant l'exécution du test, n'installez surtout pas la bibliothèque, vous détruiriez sans aucun doute votre système.

Note : En général, un échec de ce test provient souvent d'une mauvaise génération de la bibliothèque due à l'utilisation de programmes trop vieux sur votre système. Il est donc parfois nécessaire de mettre à jour d'autres programmes avant d'effectuer la mise à jour de la bibliothèque C. Par exemple, votre version de make peut être obsolète, ainsi que celle de GCC ou encore celle des outils GNU binutils (assembleur, éditeur de liens, archiveur, etc.). Les sources de tous ces programmes peuvent être trouvées sur le site du GNU.

La compilation de la bibliothèque C, ainsi que celle des autres composants « lourds » du système comme le noyau, GCC, XFree86, Gnome ou KDE, peuvent stresser votre système d'une manière qu'il n'a jamais connu. Les calculs intensifs peuvent durer plusieurs heures, ce qui fait chauffer les composants de votre ordinateur. Il n'est pas rare de voire certains de ces composants défaillir dans ces circonstances, alors qu'ils se sont toujours comportés apparemment normalement jusqu'à présent. En particulier, vous pouvez avoir des problèmes de surchauffe du processeur et des corruptions de données dans les barettes de mémoire. Les symptômes sont en général l'apparition d'une erreur de type « SIG 11 » (erreur de segmentation) sur des programmes très fiables, comme gcc ou le shell. Dans ce cas, il faut identifier et remplacer les composants défecteux (ce n'est pas une blague, ce problème m'est personnellement arrivé avec trois barettes mémoires et un processeur en moins d'un an, et il est arrivé à bien d'autres personnes dans le monde). Il est facile de penser que, avec la baisse du prix des barettes mémoires que l'on a vécu ces derniers temps, les fabricant sont tentés d'être un peu plus laxistes au niveau du contrôle qualité des composants en fin de chaîne. Le phénomène risque donc de devenir courant, et il peut parfaitement vous arriver. Bien entendu, il va de soi qu'il ne faut pas overclocker sa machine lorsqu'on se lance dans des opérations telles que celles-ci. L'overclocking est de toutes manières une technique douteuse dont le but n'est que d'arriver plus vite à avoir des problèmes curieux, surtout sous Linux. Vous êtes avertis.

L'installation se fera enfin avec les deux commande suivantes :

make install
et :
make localedata/install-locales

La compilation des paramètres internationaux utilisés par la bibliothèque C pour la France se fera ensuite avec la commande suivante :

localedef -i fr_FR -f ISO-8859-15 fr_FR

Cette commande permet de compiler les fichiers des paramètres d'affichage des monnaies et des dates, ainsi que le jeu de caractères utilisé pour comparer et trier les chaînes de caractères. Dans l'exemple donné ci-dessus, la langue choisie est le français (« fr ») tel qu'il est parlé en France (« FR »), avec le jeu de caractères ISO-8859-15. Les fichiers compilés sont placés dans le répertoire /usr/lib/locale/, à raison d'un sous-répertoire pour chaque locale configurée. Si ce répertoire n'existe pas sur votre machine, vous devrez le créer manuellement, car la commande localedef ne le fait pas automatiquement.

Note : Une fois la bibliothèque C compilée, vous aurez peut-être à recompiler GCC et un certain nombre d'autres programmes, car la compatibilité binaire d'une version à l'autre de la bibliothèque C est très relative. Si la version que vous utilisez est un simple correctif de bug cependant, la compatibilité sera sans doute totale, mais il faut savoir qu'à chaque version majeure un certain nombre de fonctionnalités sont modifiées et peuvent nécessiter des mises à jour en cascade.

Remarquez enfin que le format des fichiers d'internationalisation de la bibliothèque C a été modifié depuis la version 2.2.x. Cela peut provoquer des incompatibilité avec les programmes internationnaux qui ont été compilés statiquement avec l'ancienne version de la bibliothèque. Ces programmes devront également être recompilés.

À partir de la version 2.3 de la bibliothèque C et de la version 2.13 des binutils, une amélioration dans le chargement des bibliothèques dynamiques a été apportée. Cette amélioration permet de « précharger » ces bibliothèques et donc de gagner du temps au démarrage des programmes. Pour pouvoir bénéficier de ces améliorations, il faut installer un outil complémentaire nommé « prelink ». Les sources de cet outil pourront être trouvés sur le compte de son auteur, à l'adresse ftp://people.redhat.com/jakub/prelink/. Sa compilation requiert que la bibliothèque libelf, permettant de manipuler les fichiers binaires, soit installée. Les sources de cette bibliothèque peut également être récupérés sur Internet, à l'adresse http://www.stud.uni-hannover.de/~michael/software/libelf-0.8.2.tar.gz. L'installation de cette bibliothèque et de prelink se fait simplement à l'aide des commandes suivantes :

./configure --prefix=/usr
make
make install

Note : Pour pouvoir utiliser correctement prelink, vous devez créer un fichier /etc/prelink.conf contenant la liste de tous les répertoires des bibliothèques de votre système, à raison d'une ligne par répertoire. Le contenu de ce fichier est donc typiquement le suivant :

# Exemple de fichier /etc/prelink.conf :
/lib
/usr/lib
/usr/local/lib
/usr/X11R6/lib
/usr/lib/qt/lib
/opt/kde/lib

De plus, sachez que le préchargement des bibliothèques ne peut fonctionner que si toutes les bibliothèques dont dépend un programme, directement ou indirectement (c'est-à-dire par l'intermédiaire d'éventuelles autres bibliothèques) ont été générées avec les binutils 2.13 ou plus. Cela implique qu'un certain nombre de composants systèmes (pour ne pas dire tous) devront être recompilés au préalable. Une mise à jour de votre distribution semble donc être la solution la plus simple à ce stade.