Les détails sur ce paquet sont disponibles dans Section 8.5.3, « Contenu de Glibc. »
Le paquet Glibc contient la bibliothèque principale du C. Cette bibliothèque fournit toutes les routines basiques pour allouer de la mémoire, chercher des répertoires, ouvrir et fermer des fichiers, les lire et les écrire, gérer les chaînes, faire correspondre des modèles, faire des calculs et ainsi de suite.
Tout d'abord, créez un lien symbolique pour respecter le LSB. De 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
La commande ci-dessus est correcte. La commande ln a plusieurs versions syntaxiques, donc assurez-vous de vérifier info coreutils ln et n(1) avant de signaler ce que vous pensez être une erreur.
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 aux emplacements
indiqués par le FHS :
patch -Np1 -i ../glibc-2.40-fhs-1.patch
La documentation de Glibc recommande de construire Glibc dans un répertoire de construction dédié :
mkdir -v build cd build
Assurez-vous que les utilitaires 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=4.19 \ --with-headers=$LFS/usr/include \ --disable-nscd \ libc_cv_slibdir=/usr/lib
Voici la signification des options de configuration :
--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=4.19
Ceci indique à Glibc de compiler la bibliothèque en prenant en charge les noyaux 4.19 et les noyaux Linux ultérieurs. Les contournements pour des noyaux plus anciens ne sont pas activés.
--with-headers=$LFS/usr/include
jCeci 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
Cette option 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.
--disable-nscd
Ne pas construire le démon de cache de service de nom qui n'est plus utilisé.
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é rapporté que ce paquet pouvait ne pas fonctionner en
construisant avec un « make parallèle ». Si cela arrive,
relancez la commande make avec l'option -j1
.
Compilez le paquet :
make
Installez le paquet :
Si LFS
n'est pas correctement
configurée, et si malgré les recommandations vous construisez en
root
, la commande suivante
installera la Glibc nouvellement construite sur votre système
hôte, ce qui le rendra presque sûrement inutilisable. Alors
assurez-vous que l'environnement est correctement initialisé et
que vous n'êtes pas root
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 sera installé. Si elle n'est pas
configurée, elle renvoie par défaut à la racine (/
). Ici, nous spécifions que le paquet doit
être installé dans $LFS
, qui
deviendra la racine après le 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 stade, 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(){}' | gcc -xc - 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 aura cette 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 fonctionne pas. Examinez et reconstituez vos étapes pour trouver d'où vient le problème et comment le corriger. Ce problème doit être corrigé avant de continuer.
Une fois que tout va bien, nettoyez le fichier de test :
rm -v 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 la construction de certains paquets échoue, en particulier Binutils-pass2 ou GCC-pass2, c'est une indication que quelque chose s’est mal passé dans les installations précédentes de Binutils, GCC, ou Glibc.
Les détails sur ce paquet sont disponibles dans Section 8.5.3, « Contenu de Glibc. »