Page suivantePage précédenteTable des matières

6. Compilation avec la libc non principale

Il y a des fois où vous voudrez utiliser une bibliothèque différente pour compiler vos programmes. Cette section explique comment faire, en utilisant les noms de répertoires et d'installation utilisés dans les exemples des deux sections précédentes. Souvenez-vous de changer les noms pour coller à votre configuration.

6.1 Avertissement concernant l'utilisation de libcs non principales

Avant de compiler un programme utilisé dans le processus de démarrage, rappelez-vous que si le programme est lié dynamiquement, et est utilisé avant que les partitions non-racines soient montées, toutes les bibliothèques liées doivent être sur la partition racine. En suivant la procédure d'installation de la section précédente pour installer glibc comme bibliothèque C principale, la vieille libc reste dans /lib, qui sera sur votre partition racine. Ceci veut dire que tous vos programmes fonctionneront encore lors du démarrage. Cependant, si /usr est sur une partition différente et que vous installez glibc comme bibliothèque de test dans /usr/i486-linuxglibc2, tous les nouveaux programmes que vous compilerez avec glibc ne fonctionneront pas tant que la partition /usr ne sera pas montée.

6.2 Compilation des programmes avec une glibc de test

Pour compiler un programme avec glibc en installation de test, vous devez mettre à zéro les chemins d'en-tête pour qu'ils pointent vers les en-têtes glibc. En spécifiant "-nostdinc", vous annulerez les chemins normaux, et "-I/usr/i486-linuxglibc2/include" pointera vers les entêtes de glibc. Vous devrez aussi spécifier les en-têtes gcc, que l'on trouve dans /usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include (en supposant que vous ayez installé la bibliothèque de test dans i486-linuxglibc2 avec gcc version 2.7.2.2).

Pour lier un programme à une glibc de test, vous devez spécifier la configuration gcc. Vous le faites avec l'option "-b i486-linuxglibc2".

Pour la plupart des programmes, vous pouvez spécifier ces nouvelles options en les ajoutant aux options de makefile $CFLAGS et $LDFLAGS :

 CFLAGS = -nostdinc -I/usr/i486-linuxglibc2/include -I/usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include -b i486-linuxglibc2
 LDFLAGS = -b i486-linuxglibc2

Si vous utilisez un script configure, définissez les variables shell $CFLAGS et $LDFLAGS (en utilisant env/setenv pour csh/tcsh ou set/export pour sh/bash/etc) avant de lancer configure. Les makefiles générés par celui-ci devraient contenir les variables $CFLAGS et $LDFLAGS correctes. Tous les scripts configure ne tiendront pas compte des variables, et par conséquent vous devriez vérifier après avoir lancé configure et éditer les makefiles à la main si nécessaire.

Si les programmes que vous compilez n'appellent que gcc (et pas cpp ou les binutils directement), vous pouvez utiliser le script suivant pour économiser la spécification des options à chaque fois :

 #!/bin/bash
 /usr/bin/gcc -b i486-linuxglibc2 -nostdinc \
 -I/usr/i486-linuxglibc2/include \
 -I/usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include "$@"

Vous pourrez alors utiliser ce script à la place de "gcc" pour compiler.

6.3 Compilation des programmes avec libc 5 quand glibc est la bibliothèque principale

Pour compiler un programme avec vos anciennes bibliothèques quand vous avez installé glibc comme bibliothèque principale, vous devez mettre à zéro les chemins d'en-têtes vers les anciennes en-têtes. En spécifiant "-nostdinc", vous annulerez les chemins normaux et "-I/usr/i486-linuxlibc5/include" pointera vers les en-têtes libc 5. Vous devez aussi indiquer "-I/usr/lib/gcc-lib/i486-linuxlibc5/2.7.2.2/include" pour inclure les en-têtes spécifiques à gcc. Rappelez-vous d'ajuster ces chemins selon la manière dont vous avez nommé les nouveaux répertoires et selon votre version de gcc.

Pour lier un programme à votre ancienne libc, vous devez spécifier la configuration de gcc. Vous le faites en utilisant l'option "-b i486-linuxlibc5".

Pour la plupart des programmes, vous pouvez indiquer ces nouvelles options en les ajoutant aux options de makefile $CFLAGS et $LDFLAGS :

 CFLAGS = -nostdinc -I/usr/i486-linuxlibc5/include -I/usr/lib/gcc-lib/i486-linuxlibc5/2.7.2.2/include -b i486-linuxlibc5
 LDFLAGS = -b i486-linuxlibc5

Si vous utilisez un script configure, définissez les variables shell $CFLAGS et $LDFLAGS (en utilisant env/setenv pour csh/tcsh, ou set/export pour sh/bash/etc) avant de lancer configure. Les makefiles générés par celui-ci devraient contenir les variables $CFLAGS et $LDFLAGS corrects. Tous les scripts configure ne verront pas les variables, et vous devriez donc vérifier après avoir lancé configure et éditer les makefiles si nécessaire.

Si les programmes que vous compilez n'appellent que gcc (et pas cpp ou binutils directement), vous pouvez utiliser le script suivant pour éviter de devoir indiquer toutes les options à chaque fois :

 #!/bin/bash
 /usr/bin/gcc -b i486-linuxlibc5 -nostdinc \
 -I/usr/i486-linuxlibc5/include \
 -I/usr/lib/gcc-lib/i486-linuxlibc5/2.7.2.2/include "$@"

Vous pouvez alors utiliser ce script à la place de "gcc" pour la compilation.


Page suivantePage précédenteTable des matières