Des détails sur ce paquet se trouvent sur Section 10.9.5, « 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.
À la fin de l'installation, le système de construction lancera un
test de cohérence pour s'assurer que tout est installé
correctement. Ce script lance ses tests en tentant de compiler des
programmes de test avec certaines bibliothèques. Cependant il ne
spécifie pas le chemin vers ld.so
et
notre chaîne d'outils est toujours configurée pour utiliser celui
de /tools
. L'ensemble de commandes
suivantes forcera le script à utiliser le chemin complet du nouveau
ld.so
qui vient d'être
installé :
LINKER=$(readelf -l /tools/bin/bash | sed -n 's@.*interpret.*/tools\(.*\)]$@\1@p') sed -i "s|libs -o|libs -L/usr/lib32 -Wl,-dynamic-linker=${LINKER} -o|" \ scripts/test-installation.pl unset LINKER
Le système de construction de Glibc est auto-extractible et il
s'installera parfaitement, même si le fichier specs du compilateur
et l'éditeur de liens pointent vers /tools
. Les specs et l'éditeur de liens ne
peuvent pas être ajustés avant l'installation de Glibc, car les
tests autoconf de Glibc donneraient de faux résultats, ce qui irait
à l'encontre du but de faire une construction propre.
La documentation de Glibc recommande de construire Glibc dans un répertoire de construction dédié :
mkdir -v ../glibc-build cd ../glibc-build
Configurez Glibc pour installer ses bibliothèques dans /lib32
:
echo "libc_cv_slibdir=/lib32" >> config.cache
Préparez la compilation de Glibc :
CC="gcc ${BUILDN32}" CXX="g++ ${BUILDN32}" \ ../glibc-2.25/configure \ --prefix=/usr \ --enable-kernel=3.12.0 \ --libexecdir=/usr/lib32/glibc \ --libdir=/usr/lib32 \ --enable-obsolete-rpc \ --enable-stack-protector=strong \ --cache-file=config.cache
Voici la signification de la nouvelle option de configure :
--libexecdir=/usr/lib32/glibc
Cela change l'emplacement des liens en dur vers l'utilitaire
getconf de leur
emplacement par défaut /usr/libexec
vers /usr/lib32/glibc
.
Compilez le paquet :
make
À cause du rôle critque que joue Glibc dans un système fonctionnel, les développeurs de CLFS recommandent vivement de lancer la suite de tests.
Utilisez la commande suivante pour lancer la suite de tests et récupérer les tests en échec :
make check
La suite de tests de Glibc dépend grandement de certaines
fonctionnalités du système hôte, en particulier du noyau. Les tests
posix/annexc et conform/run-conformtest échouent
normalement et vous devriez voir Error 1
(ignored)
dans la sortie. En dehors de cela, la suite de
tests de Glibc devrait réussir. Cependant, dans certaines
circonstances, des échecs sont inévitables. Si un test échoue à
cause d'un programme manquant (ou d'un lien symbolique manquant),
ou d'une erreur de segmentation, vous verrez un code d'erreur
supérieur à 127 et les détails se trouverent dans le journal. Plus
couramment, les tests échoueront avec Error
2
— pour ceux-là, il faut vérifier le contenu des fichiers
.out
, par exemple posix/annexc.out
. Voici une liste des problèmes
les plus courants :
Les tests nptl/tst-clock2, nptl/tst-attr3, tst/tst-cputimer1 et rt/tst-cpuclock2 sont connus pour échouer. La raison n'est pas complètement comprise, mais des indications sont que des problèmes mineurs de temps peuvent déclencher ces échecs.
Les tests de math échouent parfois. Certains paramètres d'optimisation sont connus pour être en cause.
Si vous avez monté la partition CLFS avec l'option noatime
, le test atime échouera. Comme indiqué dans
Section 2.5,
« Monter la nouvelle partition », n'utilisez
pas l'option noatime
lors de la construction de CLFS.
Lorsqu'ils sont lancés sur un matériel plus ancien et plus lent, certains tests peuvent échouer à cause du dépassement du temps limite. Modifier la commande make check pour indiquer TIMEOUTFACTOR permettrait d'éliminer ces erreurs (par exemple TIMEOUTFACTOR=16 make -k check).
posix/tst-getaddrinfo4 échouera toujours à cause de la connexion réseau manquante lorsque les tests sont lancés.
Installez le paquet et supprimez des fichiers inutiles de
/usr/include/rpcsvc
:
make install && rm -v /usr/include/rpcsvc/*.x
Des détails sur ce paquet se trouvent sur Section 10.9.5, « Contenu de Glibc. »