5.7. Glibc-2.16.0

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.

Temps de construction estimé : 5.4 SBU
Espace disque requis : 554 Mo

5.7.1. Installation de Glibc

Dans certains cas, en particulier avec LFS 7.1, les en-têtes rpc n'étaient pas installées correctement. Regardez si elles sont installées dans le szstème hôte et, sinon, installez-les :

if [ ! -r /usr/include/rpc/types.h ]; then 
  su -c 'mkdir -p /usr/include/rpc'
  su -c 'cp -v sunrpc/rpc/*.h /usr/include/rpc'
fi

Corrigez un problème lors de la construction de Glibc-2.16.0 avec GCC-4.7.1 :

sed -i 's/ -lgcc_s//' Makeconfig

La documentation de Glibc recommande de construire Glibc en dehors du répertoire des sources, c'est-à-dire dans un répertoire dédié :

mkdir -v ../glibc-build
cd ../glibc-build

Ensuite, préparez la compilation de Glibc :

../glibc-2.16.0/configure                             \
      --prefix=/tools                                 \
      --host=$LFS_TGT                                 \
      --build=$(../glibc-2.16.0/scripts/config.guess) \
      --disable-profile                               \
      --enable-add-ons                                \
      --enable-kernel=2.6.25                          \
      --with-headers=/tools/include                   \
      libc_cv_forced_unwind=yes                       \
      libc_cv_ctors_header=yes                        \
      libc_cv_c_cleanup=yes

Voici la signification des options de configure :

--host=$LFS_TGT, --build=$(../glibc-2.16.0/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 1tilisant l'éditeur de liens croisé et le compilateur croisé dans /tools.

--disable-profile

Ceci construit les bibliothèques sans les informations de profilage. Enlevez cette option si le profilage sur les outils temporaires est nécessaire.

--enable-add-ons

Ceci indique à Glibc d'utiliser le composant NPTL comme bibliothèque de threads.

--enable-kernel=2.6.25

Ceci indique à Glibc de compiler la bibliothèque avec le support des noyaux Linux 2.6.25 et supérieurs. Les contournements pour les noyaux plus anciens ne sont pas activés.

--with-headers=/tools/include

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

libc_cv_forced_unwind=yes

L'éditeur de liens installé lors de Section 5.4, « Binutils-2.22 - Passe 1 » était construit de façon croisée et, dans cet état, il ne peut pas être utilisé tant que Glibc n'a pas été installé. Cela signifie que le test de configure du support force-unwind échouera puisqu'il croit avoir à faire à un éditeur de liens opérationnel. La variable libc_cv_forced_unwind=yes est passée afin d'indiquer à configure que le support de force-unwind est disponible sans qu'il n'ait à lancer le test.

libc_cv_c_cleanup=yes

De la même façon, nous passons libc_cv_c_cleanup=yes au script configure afin que le test soit sauté et que le support de gestion du nettoyage C soit configuré.

libc_cv_ctors_header=yes

De la même façon, nous passons libc_cv_ctors_header=yes au script configure pour sauter le test et configurer le support du constructeur gcc.

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.

Compilez le paquet :

make

Ce paquet est fourni avec une suite de test, cependant vous ne pouvez pas l'exécuter à ce moment car nous n'avons pas encore de compilateur C++.

[Remarque]

Remarque

La suite de tests exige aussi que des données de locale soient installées afin de s'exécuter avec succès. Les données de locale fournissent au système des informations sur la date, l'heure et les formats normaux acceptés et fournis par les outils systèmes. Si les suites de tests ne seront pas exécutés dans ce chapitre (suivant ainsi notre recommandation), il y a peu intérêt à installer les locales maintenant. Les bonnes locales seront installées dans le chapitre suivant. Néanmoins, pour installer les locales Glibc, utilisez les instructions de la section Section 6.9, « Glibc-2.16.0. »

Installez le paquet :

make install
[Attention]

Attention

À ce moment, 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 'main(){}' > dummy.c
$LFS_TGT-gcc dummy.c
readelf -l a.out | grep ': /tools'

Si tout fonctionne correctement, il ne devrait pas y avoir d'erreurs et la sortie de la dernière commande sera de la forme :

[Requesting program interpreter: /tools/lib/ld-linux.so.2]

Remarquez que /tools/lib ou /tools/lib64 pour les machines 64 bits apparaît comme préfixe de l'éditeur de liens dynamiques.

Si l'affichage diffère ou s'il n'y a aucun affichage, alors quelque chose ne se passe pas bien. Enquêtez et tracez vos étapes pour trouver où se cache le problème et comment le corriger. Ce problème doit être corrigé avant de continuer.

Une fois que tout va bien, nettoyez les fichiers de test ::

rm -v dummy.c a.out
[Remarque]

Remarque

La construction de Binutils dans la section suivante servira de test supplémentaire que l'ensemble d'outil a été construit correctement. Si Binutils échoue pour se construire, c'est une indication que quelque chose ne va pas dans les installations précédentes de Binutils, GCC, ou Glibc.

Les détails sur ce paquet sont situés dans Section 6.9.4, « Contenu de Glibc. »