Questa sezione descrive l'installazione di glibc 2 come libreria primaria. Qualsiasi nuovo programma compilato sarà collegato con questa libreria, a meno che non si usino particolari opzioni per qualche altra versione.
Se si dispone di una distribuzione Redhat o Debian, dopo aver prelevato i file rpm o deb appropriati, consultare le istruzioni per l'installazione. In questo caso si può saltare la sezione che segue.
Questa sezione spiega come compilare glibc 2 e le aggiunte a partire dai sorgenti. È necessario compilare la libreria se si desidera cambiare opzioni di ottimizzazione o configurazione o usare un pacchetto di cui non si dispongano i binari.
Su un i586@133 con 64 MB di RAM, sono necessarie circa 3 ore per compilare completamente librerie e aggiunte. Su un i686@200 "carico", è necessaria circa mezzora.
È necessario estrarre i sorgenti dagli archivi in modo da poterli compilare. Il modo migliore per farlo è:
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
Questa sequenza di comandi dispone le directory linuxthreads, crypt, e
localedata in glibc-2.0.6 dove è possibile configurare queste aggiunte.
Si crei una directory di nome compile in glibc-2.0.6
, e la si
renda directory corrente. Tutto il lavoro sarà fatto in questa directory,
cosa che semplificherà la pulizia. (Gli sviluppatori non sono ancora
stati in grado di realizzare un 'make clean' perfetto.)
mkdir compile
cd compile
Si esegua ../configure
. Per usare i pacchetti aggiuntivi, è
necessario specificarli con --enable-add-ons, come in
--enable-add-ons=linuxthreads,crypt,localedata.
Probabilmente si desidererà anche specificare i percorsi dove debbano essere
installati. Per adeguarsi alle distribuzioni standard di Linux, si specifichi
--prefix=/usr. (Quando un prefisso di /usr
è specificato su un
sistema linux, configure sa come sistemare i percorsi rimanenti per disporre
libc.so e le altre librerie importanti in /lib
.) La linea completa
di configurazione dovrebbe essere:
../configure --enable-add-ons=linuxthreads,crypt,localedata --prefix=/usr
Per compilare e verificare, si esegua:
make
make check
Ora è necessario spostare alcuni file per prepararsi per la nuova libreria, a seconda che si stia installando dai sorgenti o dai binari. Ogni nuovo programma compilato sarà collegato alla glibc, ma programmi vecchi che non sono collegati staticamente dipenderanno ancora dal libc 5, per questo non è possibile semplicemente sovrascrivere la vecchia versione.
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++
I collegamenti potrebbero essere diversi a seconda della distribuzione
di cui si dispone. Ad esempio Slackware pone gli header g++ in
/usr/local/g++-include
, mentre Debian in
/usr/include/g++
, e collega /usr/lib/g++-include
a
/usr/include/g++
. Nell'ultimo caso, probabilmente si
desidererà spostare la directory originale di nuovo in
/usr/include
.
/usr/include
oppure creano un link alla loro directory di
include in /usr/include
. È necessario ripristinare questi
file e collegamenti al fine di poter usare correttamente le librerie
extra.
/usr/i486-linuxlibc5/lib
) all'inizio del proprio
file /etc/ld.so.conf
. È necessario avere ld.so 1.8.8
(o più recente) per evitare alcuni strani messaggi una volta che glibc sia
installata.
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
e libc.so.5
dovrebbero essere copiate e
non spostate se /usr
è una partizione separata da /
, in
quanto sono necessarie per i programmi usati per far partire linux e
devono risiedere nella partizione di root.
/usr/lib/*.o
nella nuova directory.
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
Se si sta installando glibc da codice binario precompilato, si deve:
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
Con differenti archittetura o versione, sostituire i nomi di file adeguati.
Per installare la libreria dai sorgenti, si esegua:
make install
ldconfig -v
Il passo finale dell'installazione (sia nel caso di codice binario che
sorgente) è di aggionrare il file specs
di gcc, in modo da
poter collegare correttamente i propri programmi. Per determinare quale
file specs sia quello usato da gcc, si usi:
% gcc -v
reading specs from /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2/specs
gcc version 2.7.2.2
In questo caso i486-unknown-linux è il sistema, e 2.7.2.2 la versione.
È necessario copiare il file /usr/lib/gcc-lib/<system>
nella vecchia directory di sistema
cd /usr/lib/gcc-lib/
cp -r i486-unknown-linux i486-linuxlibc5
Andare nella directory originale e quella di versione
cd /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2
per modificare il file specs
presente in questa directory. Nel
file, si cambi /lib/ld-linux.so.1
in /lib/ld-linux.so.2
.
Inoltre è necessario rimuovere tutte le espressioni %{...:-lgmon}
presenti nel file, dal momento che glibc non usa la libreria gmon per
il profiling. Un esempio di file specs può essere trovato nella
sezione
Esempio di file specs.
Per verificare l'installazione, si crei il seguente programma in un file glibc.c:
#include <stdio.h>
main()
{
printf("hello world!\n");
}
e si compili il programma.
% gcc glibc.c -o glibc
Usando ldd è possibile verificare che il programma è stato collegato con
glibc2 e non la vecchia libc:
% ldd glibc
libc.so.6 => /lib/libc.so.6 (0x4000e000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
Se il programma si compila e genera "hello world!" quando
eseguito, l'installazione è corretta.