Les détails sur ce paquet sont situés dans Section 8.5.3, « Contenu de Glibc. »
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.
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.
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 :
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
À 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
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. »