5.5. Glibc-2.36

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 approximatif: 4.4 SBU
Espace disque requis: 821 Mo

5.5.1. Installation de Glibc

Tout d'abord, créez un lien symbolique pour respecter le LSB. En plus, pour x86_64, créez un lien symbolique de compatibilité requis pour le bon fonctionnement du chargeur de bibliothèques dynamiques :

case $(uname -m) in
    i?86)   ln -sfv ld-linux.so.2 $LFS/lib/ld-lsb.so.3
    ;;
    x86_64) ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64
            ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64/ld-lsb-x86-64.so.3
    ;;
esac
[Note]

Note

The above command is correct. The ln command has several syntactic versions, so be sure to check info coreutils ln and ln(1) before reporting what may appear to be an error.

Fix an issue building Glibc with parallel jobs and make-4.4 or later:

sed '/MAKEFLAGS :=/s/)r/) -r/' -i Makerules

Some of the Glibc programs use the non-FHS-compliant /var/db directory to store their runtime data. Apply the following patch to make such programs store their runtime data in the FHS-compliant locations:

patch -Np1 -i ../glibc-2.36-fhs-1.patch

La documentation de Glibc recommande de construire Glibc dans un répertoire dédié :

mkdir -v build
cd       build

Assurez-vous que les utilitaires ldconfig et sln sont installés dans /usr/sbin :

echo "rootsbindir=/usr/sbin" > configparms

Ensuite, préparez la compilation de Glibc :

../configure                             \
      --prefix=/usr                      \
      --host=$LFS_TGT                    \
      --build=$(../scripts/config.guess) \
      --enable-kernel=3.2                \
      --with-headers=$LFS/usr/include    \
      libc_cv_slibdir=/usr/lib

Voici la signification des options de configuration :

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

--enable-kernel=3.2

Ceci indique à Glibc de compiler la bibliothèque en prenant en charge les noyaux Linux 3.2 et ultérieurs. Les contournements pour les noyaux plus anciens ne sont pas activés.

--with-headers=$LFS/usr/include

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

libc_cv_slibdir=/usr/lib

This ensures that the library is installed in /usr/lib instead of the default /lib64 on 64-bit machines.

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.

The missing or incompatible msgfmt program is generally harmless. This msgfmt program is part of the Gettext package, which the host distribution should provide.

[Note]

Note

There have been reports that this package may fail when building as a "parallel make". If that occurs, rerun the make command with the "-j1" option.

Compilez le paquet :

make

Installez le paquet :

[Avertissement]

Avertissement

If LFS is not properly set, and despite the recommendations, you are building as root, the next command will install the newly built Glibc to your host system, which will almost certainly render it unusable. So double-check that the environment is correctly set, and that you are not root, before running the following command.

make DESTDIR=$LFS install

Voici la signification de l'option de make install ::

DESTDIR=$LFS

The DESTDIR make variable is used by almost all packages to define the location where the package should be installed. If it is not set, it defaults to the root (/) directory. Here we specify that the package is installed in $LFS , which will become the root directory in Section 7.4, « Entrer dans l'environnement chroot ».

Fix a hard coded path to the executable loader in the ldd script:

sed '/RTLDLIST=/s@/usr@@g' -i $LFS/usr/bin/ldd
[Attention]

Attention

À ce stade, 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 'int main(){}' | $LFS_TGT-gcc -xc -
readelf -l a.out | grep ld-linux

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: /lib64/ld-linux-x86-64.so.2]

Notez que pour les machines 32 bits, le nom de l'interpréteur sera /lib/ld-linux.so.2.

If the output is not as shown above, or there is no output at all, then something is wrong. Investigate and retrace the steps to find out where the problem is and correct it. This issue must be resolved before continuing.

Une fois que tout va bien, nettoyez le fichier de test :

rm -v a.out
[Note]

Note

Building the packages in the next chapter will serve as an additional check that the toolchain has been built properly. If some package, especially Binutils-pass2 or GCC-pass2, fails to build, it is an indication that something has gone wrong with the preceding Binutils, GCC, or Glibc installations.

Now that our cross-toolchain is complete, finalize the installation of the limits.h header. To do this, run a utility provided by the GCC developers:

$LFS/tools/libexec/gcc/$LFS_TGT/12.2.0/install-tools/mkheaders

Les détails sur ce paquet sont disponibles dans Section 8.5.3, « Contenu de Glibc. »