Cette section couvre l'installation de glibc2 comme bibliothèque C principale. Tous les nouveaux programmes que vous compilerez seront liés avec cette bibliothèque, sauf si vous utilisez des options de compilation spéciales pour le lier avec une autre version.
Si vous utilisez Redhat ou Debian et avez chargé les fichier rpm ou deb adéquats, voyez les instructions d'installation Redhat ou Debian. Vous pouvez alors sauter cette section.
Cette section explique comment compiler glibc 2 et ses extensions à partir des sources. Vous devez compiler la bibliothèque si vous voulez changer les options d'optimisation ou de configuration ou utiliser un paquetage pour lequel vous n'avez pas de binaire.
Sur un i586 à 133 MHz avec 64 Mo de RAM, il faut environ trois heures pour compiler toutes les bibliothèques avec les extensions. Sur un i686 à 200 MHz chargé, il faut environ une demi-heure.
Vous devez extraire les sources des archives pour compiler. La meilleure façon de le faire est ainsi :
tar xzf glibc-2.0.6.tar.gz
cd glibc-2.0.6
tar xzf ../glibc-linuxthreads-2.0.6.tar.gz
tar xzf ../glibc-crypt-2.0.6.tar.gz
tar xzf ../glibc-localedata-2.0.6.tar.gz
Ceci mettra les répertoires linuxthreads, crypt et localedata dans le répertoire glibc-2.0.6 où configure pourra trouver ces extensions.
Dans le répertoire glibc-2.0.6
, créez un répertoire nommé
compile, et allez dedans. Tout le travail sera fait dans ce
répertoire, ce qui simplifiera le nettoyage (les développeurs ne se
sont pas vraiment soucié du 'make clean' pour l'instant).
mkdir compile
cd compile
Lancez ../configure
. Pour utiliser les paquetages supplémentaires,
vous devez les spécifier avec --enable-add-ons, comme
--enable-add-ons=linuxthreads,crypt,localedata. Vous devrez aussi
sûrement spécifier les chemins où elle sera installée. Pour coller aux
distributions Linux normales, spécifiez --prefix=/usr. (Quand on
spécifie le préfixe /usr
sur un système Linux, configure sait ajuster
les autres chemins pour placer libc.so et d'autres bibliothèques
importantes dans /lib
.) La ligne de commande complète de configure
serait :
../configure --enable-add-ons=linuxthreads,crypt,localedata --prefix=/usr
Pour compiler et vérifier, lancez :
make
make check
Vous devez maintenant déplacer certains fichiers pour vous préparer à l'arrivée de la nouvelle bibliothèque, que vous l'installiez à partir des sources ou de binaires. Tous les nouveaux programmes compilés seront liés à glibc, mais les vieux programmes qui ne sont pas liés en statique dépendront encore de libc 5, et vous ne pouvez donc pas écraser l'ancienne version.
mkdir -p /usr/i486-linuxlibc5/lib
/usr/include
:
mv /usr/include /usr/i486-linuxlibc5/include
mkdir /usr/include
ln -s /usr/src/linux/include/linux /usr/include/linux
ln -s /usr/src/linux/include/asm /usr/include/asm
ln -s /usr/X11R6/include/X11 /usr/include/X11
ln -s /usr/lib/g++-include /usr/include/g++
Les liens devront être ajustés au besoin selon votre
distribution. Rien que la Slackware installe les en-têtes g++ dans
/usr/local/g++-include
, alors que Debian met les en-têtes
dans /usr/include/g++
, et fait un lien de
/usr/lib/g++-include
vers /usr/include/g++
. Dans
d'autres cas, vous voudrez sûrement déplacer le répertoire d'en-têtes
g++ d'origine à son ancien emplacement /usr/include
.
/usr/include
ou installent un
lien vers leur répertoire d'en-tête dans /usr/include
. Ces
fichiers et liens doivent être remis en place pour pouvoir utiliser
les bibliothèques supplémentaires correctement.
/usr/i486-linuxlibc5/lib
) en haut de votre fichier
/etc/ld.so.conf
. Vous devriez avoir ld.so-1.8.8 ou mieux
installé pour éviter d'avoir des messages bizarres une fois que glibc
sera installée.
mv /usr/lib/libbsd.a /usr/i486-linuxlibc5/lib
mv /usr/lib/libc.a /usr/i486-linuxlibc5/lib
mv /usr/lib/libgmon.a /usr/i486-linuxlibc5/lib
mv /usr/lib/libm.a /usr/i486-linuxlibc5/lib
mv /usr/lib/libmcheck.a /usr/i486-linuxlibc5/lib
mv /usr/lib/libc.so /usr/i486-linuxlibc5/lib
mv /usr/lib/libm.so /usr/i486-linuxlibc5/lib
cp /lib/libm.so.5.* /usr/i486-linuxlibc5/lib
cp /lib/libc.so.5.* /usr/i486-linuxlibc5/lib
libm.so.5
et libc.so.5
doivent être copiées et non
déplacées si /usr
est une partition différente de /
,
parce qu'elles sont nécessaires aux programmes utilisés pour démarrer
Linux et doivent être situées sur la partition racine.
/usr/lib/*.o
dans le nouveau
répertoire.
mv /usr/lib/crt1.o /usr/i486-linuxlibc5/lib
mv /usr/lib/crti.o /usr/i486-linuxlibc5/lib
mv /usr/lib/crtn.o /usr/i486-linuxlibc5/lib
mv /usr/lib/gcrt1.o /usr/i486-linuxlibc5/lib
ldconfig -v
Si vous installez glibc à partir de binaires précompilés, vous devez :
cd /
gzip -dc glibc-2.0.bin.i386.tar.gz | tar tvvf -
gzip -dc glibc-crypt-2.0.bin.i386.tar.gz | tar tvvf -
ldconfig -v
Si vous avez une architecure ou une version différente, substituez les noms de fichiers adéquats.
Pour installer la bibliothèque à partir des sources, lancez :
make install
ldconfig -v
L'étape finale de l'installation (à la fois pour les installations
binaires et sources) est de mettre à jour le fichier specs
de
gcc pour que vous puissiez lier vos programmes proprement. Pour
déterminer quel fichier specs est utilisé par gcc, lancez :
% gcc -v
reading specs from /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2/specs
gcc version 2.7.2.2
Dans ce cas, i486-unknown-linux est le système, et 2.7.2.2 est la
version. Vous devez copier /usr/lib/gcc-lib/<système>
dans l'ancien répertoire système :
cd /usr/lib/gcc-lib/
cp -r i486-unknown-linux i486-linuxlibc5
Allez dans le répertoire d'origine et dans le répertoire de version
cd /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2
et éditez le fichier specs
que vous y trouverez. Dans ce
fichier, changez /lib/ld-linux.so.1
en
/lib/ld-linux.so.2
. Vous devrez aussi enlever toutes les
expressions %{...:-lgmon}
de ce fichier, puisque glibc
n'utilise pas la bibliothèque gmon pour les optimisations. Un fichier
specs d'exemple se trouve dans la section
fichiers specs d'exemple.
Pour tester l'installation, créez le programme suivant dans un fichier appelé glibc.c :
#include <stdio.h>
main()
{
printf("hello world!\n");
}
et compilez le programme.
% gcc glibc.c -o glibc
Utilisez ldd pour vérifier que le programme a été lié avec glibc2, et non avec votre ancienne libc :
% ldd glibc
libc.so.6 => /lib/libc.so.6 (0x4000e000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
Si ça compile et que ça génère "hello world!" quand vous le lancez, l'installation est réussie.