Les détails sur ce paquet sont disponibles dans Section 10.8.5, « Contenu d'EGLIBC. »
Le paquet EGLIBC contient la bibliothèque C principale. Cette bibliothèque fournit toutes les routines de base pour allouer de la mémoire, rechercher dans des répertoires, ouvrir et fermer des fichiers, les lire et les écrire, gérer les chaînes, faire de la recherche de motifs, faire de l'arithmétique etc.
Certains paquets non compris dans CLFS suggèrent d'installer GNU
libiconv pour traduire les données d'un encodage en un autre. La
page d'accueil du projet (http://www.gnu.org/software/libiconv/)
précise que « Cette bibliothèque fournit
une implémentation de iconv()
à
utiliser sur les systèmes qui n'en disposent pas ou dont
l'implémentation ne convertit pas l'Unicode. » EGLIBC
fournit une implémentation d'iconv()
et peut convertir de l'Unicode, du coup
libiconv n'est pas requis sur un système CLFS.
En multilib, on a tendance à penser que compiler pour ${CLFS_TARGET32}
n'est pas de la compilation croisée. EGLIBC a
une vision traditionnelle selon laquelle si vous construisez pour
un autre hôte, vous faites une compilation croisée, donc vous
n'exécuterez pas les tests, et donc vous n'avez pas besoin des
fichiers de locale. Quand on lance les tests, beaucoup échoueront
sans les fichiers de localisation. Le sed suivant permet aux tests
de réussir :
sed -i '/cross-compiling/s@ifeq@ifneq@g' ../eglibc-2.18/localedata/Makefile
Ce même script effectue ses tests en essayant de compiler des programmes de test contre certaines bibliothèques. Cependant, il ne spécifie pas le ld.so, or notre ensemble d'outils est configuré pour utiliser celui de /tools. L'ensemble de commandes suivant obligera le script à utiliser le chemin complet du nouveau ld.so qu'on vient d'installer :
LINKER=$(readelf -l /tools/bin/bash | sed -n 's@.*interpret.*/tools\(.*\)]$@\1@p') sed -i "s|libs -o|libs -L/usr/lib -Wl,-dynamic-linker=${LINKER} -o|" \ scripts/test-installation.pl unset LINKER
Le système de construction d'EGLIBC est autosuffisant et s'installe
parfaitement, même si notre fichier specs pour le compilateur et
l'éditeur de liens pointent toujours vers /tools
. Les specs et l'éditeur de liens ne
peuvent pas être ajustés avant l'installation de la EGLIBC parce
que les tests d'autoconf d'EGLIBC donneraient alors des résultats
faussés, défaussant ainsi notre but d'achever une construction
propre.
Permettez à EGLIBC de détecter Make-4.x :
sed -r -i 's/(3..89..)/\1 | 4.*/' configure
La documentation d'EGLIBC recommande de construire EGLIBC en dehors du répertoire des sources dans un répertoire de construction dédié :
mkdir -v ../eglibc-build cd ../eglibc-build
Préparez la compilation d'EGLIBC :
CC="gcc ${BUILD32}" CXX="g++ ${BUILD32}" \ CFLAGS="-march=$(cut -d- -f1 <<< ${CLFS_TARGET32}) -O2" \ ../eglibc-2.18/configure --prefix=/usr \ --disable-profile --enable-kernel=2.6.32 \ --libexecdir=/usr/lib/eglibc --host=${CLFS_TARGET32} \ --enable-obsolete-rpc
Voici la signification de la nouvelle option de configure :
--libexecdir=/usr/lib/glibc
Ceci change l'emplacement de l'outil getconf de celui par défaut
/usr/libexec
vers /usr/lib/glibc
.
Compilez le paquet :
make
La suite de tests d'EGLIBC est considérée comme critique. Ne la sautez sous aucun prétexte.
À la fin de l'installation, le système de construction exécutera un test de propreté pour s'assurer que tout s'est installé correctement. Ce script essaiera de tester la présence d'une bibliothèque utilisée uniquement pour la suite de tests, et elle n'est jamais installée. Empêchez le script de tester la présence de cette bibliothèque avec la commande suivante :
sed -i 's/\(&& $name ne\) "db1"/ & \1 "nss_test1"/' scripts/test-installation.pl
Testez les résultats :
cp -v ../eglibc-2.18/iconvdata/gconv-modules iconvdata make -k check 2>&1 | tee eglibc-check-log; grep Error eglibc-check-log
La suite de tests EGLIBC est très dépendante de certaines fonctions
du système hôte, en particulier du noyau. Normalement, le test
posix/annexc échoue et vous devriez voir Error 1 (ignored)
dans la sortie. Excepté cela, la
suite de tests d'EGLIBC devrait toujours passer. Néanmoins, dans
certaines circonstances, certains échecs sont inévitables. Si un
test échoue à cause d'un programme manquant (ou d'un lien
symbolique manquant), ou du fait d'une erreur de segmentation, vous
verrez un code d'erreur supérieur à 127 et les détails seront dans
le journal. De manière plus générale, les tests échoueront avec
Error 2
- pour eux le contenu du
fichier .out
, comme posix/annexc.out
peut vous donner des
informations. Voici une liste des problèmes les plus
fréquents :
Les tests math échouent quelque fois. Certaines optimisations sont connues pour être une cause de cela.
Si vous avez monté la partition CLFS avec l'option noatime
, le test atime échouera. Comme mentionné
dans Section 2.4,
« Monter la nouvelle partition », n'utilisez
pas l'option noatime
lors de la construction de CLFS.
Lors d'une exécution sur un matériel ancien et lent, quelques tests peuvent échouer à cause de délais dépassés.
Bien que ce ne soit qu'un simple message, l'étape d'installation de
EGLIBC se plaindra de l'absence de /etc/ld.so.conf
. Supprimez ce message
d'avertissement avec :
touch /etc/ld.so.conf
Installez le paquet et supprimez des fichiers inutiles dans
/usr/include/rpcsvc
:
make install && rm -v /usr/include/rpcsvc/*.x
Les détails sur ce paquet sont disponibles dans Section 10.8.5, « Contenu d'EGLIBC. »