5.5. Glibc-2.34

Le paquet Glibc contient la bibliothèque C principale. Cette bibliothèque fournit toutes les routines basiques pour allouer de la mémoire, rechercher des répertoires, ouvrir et fermer des fichiers, les lire et les écrire, gérer les chaînes, faire correspondre des modèles, faire de l'arithmétique et ainsi de suite.

Temps de construction approximatif: 4.2 SBU
Espace disque requis: 744 Mo

5.5.1. Installation de Glibc

Tout d'abord, créez un lien symbolique pour respecter le LSB. En plus, pour x86_64, créez un lien symbolique de compatibilité requis pour le bon fonctionnement du chargeur de bibliothèques dynamiques :

case $(uname -m) in
    i?86)   ln -sfv ld-linux.so.2 $LFS/lib/ld-lsb.so.3
    ;;
    x86_64) ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64
            ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64/ld-lsb-x86-64.so.3
    ;;
esac

Certains programmes de Glibc utilisent le répertoire /var/db qui ne respecte pas le FHS pour stocker leurs données d'exécution. Appliquez le correctif suivant pour que ces programmes stockent leurs données d'exécution à l'emplacement indiqué par le FHS :

patch -Np1 -i ../glibc-2.34-fhs-1.patch

La documentation de Glibc recommande de construire Glibc dans un répertoire dédié :

mkdir -v build
cd       build

Assurez-vous que ldconfig et sln sont installés dans /usr/sbin :

echo "rootsbindir=/usr/sbin" > configparms

Ensuite, préparez la compilation de Glibc :

../configure                             \
      --prefix=/usr                      \
      --host=$LFS_TGT                    \
      --build=$(../scripts/config.guess) \
      --enable-kernel=3.2                \
      --with-headers=$LFS/usr/include    \
      libc_cv_slibdir=/usr/lib

Voici la signification des options de configure :

--host=$LFS_TGT, --build=$(../scripts/config.guess)

L'effet combiné de ces commutateurs est que le système de construction de Glibc se configure pour se compiler de manière croisée en utilisant l'éditeur de liens croisé et le compilateur croisé dans $LFS/tools.

--enable-kernel=3.2

Ceci indique à Glibc de compiler la bibliothèque avec la prise en charge des noyaux Linux 3.2 et supérieurs. Les contournements pour les noyaux plus anciens ne sont pas activés.

--with-headers=$LFS/usr/include

Ceci dit à Glibc de se compiler contre les en-têtes récemment installés dans le répertoire $LFS/usr/include, afin qu'il connaisse exactement les fonctionnalités du noyau et puisse s'optimiser en conséquence.

libc_cv_slibdir=/usr/lib

Cela s'assure que la bibliothèque est installée dans /usr/lib au lieu du répertoire /lib64 par défaut sur les machines 64 bits.

Lors de cette étape, le message d'avertissement suivant peut apparaître :

configure: WARNING:
*** These auxiliary programs are missing or
*** incompatible versions: msgfmt
*** some features will be disabled.
*** Check the INSTALL file for required versions.

Le programme msgfmt, manquant ou incompatible, ne pose généralement pas de problème. Ce programme msgfmt fait partie du paquet Gettext que la distribution hôte devrait fournir.

[Note]

Note

Il a été reporté que ce paquet pouvait échouer avec un « make parallèles ». Si cela arrive, relancez la commande avec l'option « -j1 ».

Compilez le paquet :

make

Installez le paquet :

[Avertissement]

Avertissement

Si LFS n'est pas correctement initialisée, et malgré les recommandations, que vous construisez en root, la commande suivante installera la glibc nouvellement construite sur votre système hôte, ce qui le rendra inutilisable. Alors assurez-vous que l'environnement est correctement initialisé avant de lancer la commande suivante.

make DESTDIR=$LFS install

Voici la signification de l'option de make install ::

DESTDIR=$LFS

La variable make DESTDIR est utilisée par presque tous les paquets pour définir l'emplacement où le paquet devrait être installé. Si elle n'est pas indiquée, elle correspond par défaut à la racine (/). Ici, nous spécifions que le paquet doit être installé dans $LFS, qui deviendra la racine après Section 7.4, « Entrer dans l'environnement chroot ».

Corrigez un chemin codé en dur vers le chargeur d'exécutable dans le script ldd :

sed '/RTLDLIST=/s@/usr@@g' -i $LFS/usr/bin/ldd
[Attention]

Attention

À ce moment, il est impératif de vous arrêter et de vous assurer que les fonctions de base (compilation et édition des liens) du nouvel ensemble d'outils fonctionnent comme prévu. Pour effectuer un test de propreté, lancez les commandes suivantes :

echo 'int main(){}' > dummy.c
$LFS_TGT-gcc dummy.c
readelf -l a.out | grep '/ld-linux'

Si tout fonctionne correctement, il ne devrait pas y avoir d'erreurs et la sortie de la dernière commande sera de la forme :

[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]

Notez que pour les machines 32 bits, le nom de l'interpréteur sera /lib/ld-linux.so.2.

Si l'affichage diffère ou s'il n'y a aucun affichage, alors quelque chose ne se passe pas bien. Enquêtez et tracez vos étapes pour trouver où se cache le problème et comment le corriger. Ce problème doit être corrigé avant de continuer.

Une fois que tout va bien, nettoyez les fichiers de test :

rm -v dummy.c a.out
[Note]

Note

La construction des paquets dans le prochain chapitre servira de test supplémentaire pour vérifier que l'ensemble d'outils a été construit correctement. Si certains paquets, en particulier binutils-pass2 ou gcc-pass2, échouent à se construire, c'est une indication que quelque chose ne va pas dans les installations précédentes de Binutils, GCC, ou Glibc.

Maintenant que notre chaîne d'outils croisée est complète, finalisez l'installation de l'en-tête limits.h. Pour cela, lancez un utilitaire fournit par les développeurs de GCC :

$LFS/tools/libexec/gcc/$LFS_TGT/11.2.0/install-tools/mkheaders

Les détails sur ce paquet sont situés dans Section 8.5.3, « Contenu de Glibc. »