10.7. EGLIBC-2.18 32 bit Libraries

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.

10.7.1. Installation de EGLIBC

[Remarque]

Remarque

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.

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
[Important]

Important

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 :

make install

Les détails sur ce paquet sont disponibles dans Section 10.8.5, « Contenu d'EGLIBC. »