5.15. EGLIBC-2.13

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.

5.15.1. Installation de EGLIBC

Remarquez que toute autre méthode de construction Glibc que celle suggérée dans ce livre met en péril la stabilité du système.

MIPS is not supported in the main EGLIBC tree, so we need the eglibc-ports tarball. After entering the EGLIBC source dir, unpack eglibc-ports-2.13 and rename the directory it creates so that EGLIBC's build system can find it:

tar -jxvf ../eglibc-ports-2.13.tar.bz2
mv -v eglibc-ports-2.13 ports

Désactivez l'édition d'un lien vers libgcc_eh:

cp -v Makeconfig{,.orig}
sed -e 's/-lgcc_eh//g' Makeconfig.orig > Makeconfig

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

Vous devez ajouter les lignes suivantes à config.cache pour qu'EGLIBC supporte NPTL :

cat > config.cache << "EOF"
libc_cv_forced_unwind=yes
libc_cv_c_cleanup=yes
libc_cv_gnu89_inline=yes
libc_cv_ssp=no
EOF

Préparez la compilation d'EGLIBC :

BUILD_CC="gcc" CC="${CLFS_TARGET}-gcc" \
    AR="${CLFS_TARGET}-ar" RANLIB="${CLFS_TARGET}-ranlib" \
    ../eglibc-2.13/configure --prefix=/tools \
    --host=${CLFS_TARGET} --build=${CLFS_HOST} \
    --disable-profile --enable-add-ons \
    --with-tls --enable-kernel=2.6.0 --with-__thread \
    --with-binutils=/cross-tools/bin --with-headers=/tools/include \
    --cache-file=config.cache

Voici la signification des nouvelles options de configure :

BUILD_CC="gcc"

Ceci règle GCC pour qu'il utilise le compilateur actuel de notre système. On l'utilise pour créer les outils dont Glibc se sert pendant sa construction.

CC="${CLFS_TARGET}-gcc"

Ceci oblige Glibc à utiliser le compilateur GCC que nous avons construit pour notre architecture cible.

AR="${CLFS_TARGET}-ar"

Ceci oblige Glibc à utiliser l'outil ar que nous avons construit pour notre architecture cible.

RANLIB="${CLFS_TARGET}-ranlib"

Ceci oblige Glibc à utiliser l'outil ranlib que nous avons ´construit pour notre architecture cible.

--disable-profile

Ceci construit les bibliothèques sans informations de profilage. N'utilisez pas cette option si le profiling est nécessaire sur les outils temporaires.

--enable-add-ons

Ceci dit à Glibc d'utiliser toutes les extensions disponibles.

--with-tls

Ceci dit à Glibc d'utiliser Thread Local Storage.

--enable-kernel=2.6.0

Ceci dit à Glibc de compiler la bibliothèque avec le support pour les noyaux Linux 2.6.x.

--with-__thread

Ceci dit à Glibc d'utiliser __thread pour la construction de libc et de libpthread.

--with-binutils=/cross-tools/bin

Ceci dit à Glibc d'utiliser les Binutils spécifiques à notre architecture cible.

--with-headers=/tools/include

Ceci dit à Glibc de se compiler avec les en-têtes récemment installées dans le répertoire /tools, afin qu'il sache exactement quelles fonctionnalités a le noyau et qu'il puisse s'optimiser en conséquence.

--cache-file=config.cache

Ceci dit à Glibc d'utiliser un fichier de cache préfabriqué.

Pendant cette étape, il se pourrait que les avertissements suivants apparaissent :

configure: WARNING:
*** These auxiliary programs are missing or
*** incompatible versions: msgfmt
*** some features will be disabled.
*** Check the INSTALL file for required versions.

L'absence ou l'incompatibilité du programme msgfmt n'est en général pas gênant. Ce programme msgfmt fait partie du paquet Gettext que la distribution hôte devrait fournir.

Compilez le paquet :

make

Installez le paquet :

make install

Les détails sur ce paquet sont disponibles dans Section 10.7.5, “Contenu d'EGLIBC.”