Avanti Indietro Indice

5. Installazione come libreria C primaria

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.

5.1 Compilare la libreria dai sorgenti.

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.

Prerequisiti.

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.

Estrarre i sorgenti.

È 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.

Configurazione.

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

Compilazione.

Per compilare e verificare, si esegua:

 make
 make check
 

5.2 Prepararsi per l'installazione.

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.

  1. Creare una nuova directory per contenere i vecchi file:
      mkdir -p /usr/i486-linuxlibc5/lib
      
    
  2. I vecchi file di header devono essere rimosssi da /usr/include:
     mv /usr/include /usr/i486-linuxlibc5/include
     
    
  3. Creare una nuova directory per i file include ed assegnare i collegamenti per includere altre directory:
     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.
  4. Ripristinare ogni file di header o collegamento extra. Alcune librerie non standard come ncurses pongono i propri file in /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.
  5. Aggiungere la nuova directory della libreria (ad esempio /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.
  6. Spostare/copiare tutte le librerie C vecchie nella nuova directory.
     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.
  7. Spostare i file /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
     
    
  8. Aggiornare la propria cache dopo lo spostamento delle librerie
     ldconfig -v
     
    

5.3 Installare dal pacchetto binario.

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.

5.4 Installare dai sorgenti.

Per installare la libreria dai sorgenti, si esegua:

 make install
 ldconfig -v
 

5.5 Aggiornare i file specs di gcc.

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.

5.6 Controllare la propria installazione.

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.


Avanti Indietro Indice