5. Installation comme bibliothèque C principale

Contenu de cette section

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 pourrez alors sauter cette section.

5.1 Construction de la bibliothèque à partir des sources

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.

Éléments requis

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.

Extraction des sources

Vous devez extraire les sources des archives pour compiler. La meilleure façon de le faire est ainsi :

 tar xzf glibc-2.0.5.tar.gz
 cd glibc-2.0.5
 cat ../glibc-2.0.5-2.0.5c.diff.gz | gzip -d | patch -p0
 tar xzf ../glibc-linuxthreads-2.0.5.tar.gz
 tar xzf ../glibc-crypt-2.0.5.tar.gz
 tar xzf ../glibc-localedata-2.0.5.tar.gz
 

Ceci mettra les répertoires linuxthreads, crypt et localedata dans le répertoire glibc-2.0.5 où configure pourra trouver ces extensions.

Configuration

Dans le répertoire glibc-2.0.5, 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 n'ont pas vraiment pensé à parfaire le '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

Compilation

Pour compiler et vérifier, lancez :

 make
 make check
 

5.2 Préparation à l'installation

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.

  1. Créez un nouveau répertoire pour y mettre les anciens fichiers :
     mkdir -p /usr/i486-linuxlibc5/lib
     
    
  2. Les vieux fichiers d'en-tête doivent être évacués de /usr/include :
     mv /usr/include /usr/i486-linuxlibc5/include
     
    
  3. Créez un nouveau répertoire d'en-têtes et activez les liens vers d'autres en-têtes :
     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.
  4. Remettre des fichiers d'en-têtes et des liens supplémentaires. Certaines bibliothèques non standards comme ncurses installent des fichiers dans /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.
  5. Ajoutez le nouveau répertoire de bibliothèque (comme /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.
  6. Déplacez ou copiez toutes les anciennes bibliothèques C dans le nouveau répertoire.
     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 root.
  7. Déplacez les fichiers /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
     
    
  8. Mettez à jour votre cache de bibliothèque après avoir déplacé vos bibliothèques.
     ldconfig -v
     
    

5.3 Installation à partir du paquetage binaire

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érentes, substituez les noms de fichiers adéquats.

5.4 Installation à partir des sources

Pour installer la bibliothèque à partir des sources, lancez :

 make install
 ldconfig -v
 

5.5 Mise à jour des specs gcc

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 .

5.6 Test de l'installation

Pour tester l'installation, créez le programme suivant dans un fichier appelé glibc.c :

 #include &lt;stdio.h&gt;

 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.


Chapitre suivant, Chapitre Précédent

Table des matières de ce chapitre, Table des matières générale

Début du document, Début de ce chapitre