Les détails sur ce paquet sont situés dans Section 6.9.4, « 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.
Corrigez un bogue qui empêche Glibc de se construire avec GCC-4.5.3 :
patch -Np1 -i ../glibc-2.12.2-gcc_fix-1.patch
Ajoutez le support de PaX à Glibc :
patch -Np1 -i ../glibc-2.12.2-pt_pax-1.patch patch -Np1 -i ../glibc-2.12.2-dl_execstack-1.patch patch -Np1 -i ../glibc-2.12.2-localedef_trampoline-1.patch
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
Glibc ne supportant plus i386, ses développeurs disent d'utiliser
le commutateur du compilateur -march=i486
lorsqu'on le compile pour
des machines x86. On peut faire cela de plusieurs manières, mais
des tests montrent que la meilleure place pour le commutateur est à
l'intérieur de la variable de compilation « CFLAGS ». Au lieu de remplacer entièrement ce
que le système de compilation interne de Glibc utilise pour CFLAGS,
ajoutez le nouveau commutateur au contenu existant de CFLAGS en
utilisant le fichier spécial configparms
. Le commutateur -mtune=native est
également requis pour réinitialiser une valeur raisonnable pour
-mtune, laquelle est modifiée lors du paramétrage de -march.
case `uname -m` in i?86) echo "CFLAGS += -march=i486 -mtune=native" > configparms ;; esac
Ensuite, préparez la compilation de Glibc :
../glibc-2.12.2/configure --prefix=/tools \ --host=$LFS_TGT --build=$(../glibc-2.12.2/scripts/config.guess) \ --disable-profile --enable-add-ons \ --enable-kernel=2.6.22.5 --with-headers=/tools/include \ libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes
Voici la signification des options de configure :
--host=$LFS_TGT,
--build=$(../glibc-2.12.2/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.22.5
Ceci indique à Glibc de compiler la bibliothèque avec le support des noyaux Linux 2.6.18 et supérieurs. Les environnements pour des 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.21.1 - 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é.
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. Si msgfmt est présent mais semble incompatible, mettez à jour le paquet Gettext du système hôte ou continuez sans et voyez si la suite de tests continue son exécution sans problèmes.
Le paquet Glibc se construit en deux phases. Dans la première,
seules les bibliothèques sont compilées avec notre -fPIC
de GCC activé. Dans la seconde
phase, les programmes sont compilés avec les durcissements
supplémentaires.
Préparez le fichier configparms
pour
construire les bibliothèques de Glibc :
cat >> configparms << "EOF"
build-programs=no
LDFLAGS.so += -Wl,--warn-shared-textrel,--fatal-warnings
EOF
Compilez les bibliothèques :
make
Dans cette prochaine étape, les options de durcissement sont
ajoutées aux options du compilateur. Le programme sln est lié de manière statique,
donc l'option -fPIE
est
inversée par l'option -fno-PIE
. La variable +link
est redéfinie pour lier les
programmes à -pie
, et elle
se comporte essentiellement comme +link-pie
qui se trouve dans le
fichier Makeconfig
, mais avec en plus
--warn-shared-textrel
--fatal-warnings
pour nous avertir si les programmes
n'ont pas été compilés correctement.
Préparez le fichier configparms
pour
construire les programmes de Glibc :
cat > configparms << "EOF"
CC += -fPIE -fstack-protector-all -D_FORTIFY_SOURCE=2
CXX += -fPIE -fstack-protector-all -D_FORTIFY_SOURCE=2
CFLAGS-sln.c += -fno-PIC -fno-PIE
+link = $(CC) -pie -Wl,-O1 -nostdlib -nostartfiles -o $@ \
$(sysdep-LDFLAGS) $(config-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \
$(combreloc-LDFLAGS) $(relro-LDFLAGS) $(hashstyle-LDFLAGS) \
-Wl,-z,now -Wl,--warn-shared-textrel,--fatal-warnings \
$(addprefix $(csu-objpfx),S$(start-installed-name)) \
$(+preinit) $(+prectorS) \
$(filter-out $(addprefix $(csu-objpfx),start.o \
S$(start-installed-name))\
$(+preinit) $(link-extra-libs) \
$(common-objpfx)libc% $(+postinit),$^) \
$(link-extra-libs) $(link-libc) $(+postctorS) $(+postinit)
EOF
case `uname -m` in
i?86) echo "CFLAGS += -march=i486 -mtune=native" >> configparms ;;
esac
Compilez les programmes :
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++.
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.12.2. »
Installez le paquet :
make install
Les détails sur ce paquet sont situés dans Section 6.9.4, « Contenu de Glibc. »