Les détails sur ce paquet sont disponibles dans Section 8.5.3, « Contenu de Glibc. »
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.
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
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.
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 :
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
À 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
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. »