<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML> <HEAD> <TITLE>Glibc 2 HOWTO: Installazione come libreria C primaria</TITLE> <LINK HREF="Glibc2-HOWTO-6.html" REL=next> <LINK HREF="Glibc2-HOWTO-4.html" REL=previous> <LINK HREF="Glibc2-HOWTO.html#toc5" REL=contents> </HEAD> <BODY> <A HREF="Glibc2-HOWTO-6.html">Avanti</A> <A HREF="Glibc2-HOWTO-4.html">Indietro</A> <A HREF="Glibc2-HOWTO.html#toc5">Indice</A> <HR> <H2><A NAME="installazione primaria"></A> <A NAME="s5">5. Installazione come libreria C primaria</A></H2> <P> <!-- glibc!installazione --> <P>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. <P>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. <P> <P> <H2><A NAME="compiling"></A> <A NAME="ss5.1">5.1 Compilare la libreria dai sorgenti.</A> </H2> <P> <!-- glibc!installazione!compilazione --> <P>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. <P> <H3>Prerequisiti.</H3> <P> <!-- glibc!installazione!prerequisiti --> <P> <UL> <LI>Circa 150 MB di spazio libero su disco</LI> <LI>GNU make 3.75</LI> <LI>gcc >= 2.7.2 (meglio 2.7.2.1)</LI> <LI>binutils 2.8.1 (per alpha è necessario a ? )</LI> <LI>bash 2.0</LI> <LI>autoconf 2.12 (se si modifica configure.in)</LI> <LI>texinfo 3.11</LI> </UL> <P>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. <P> <H3>Estrarre i sorgenti.</H3> <P> <!-- glibc!installazione!sorgenti, estrarre --> <P>È necessario estrarre i sorgenti dagli archivi in modo da poterli compilare. Il modo migliore per farlo è: <BLOCKQUOTE><CODE> <PRE> 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 </PRE> </CODE></BLOCKQUOTE> Questa sequenza di comandi dispone le directory linuxthreads, crypt, e localedata in glibc-2.0.6 dove è possibile configurare queste aggiunte. <P> <H3>Configurazione.</H3> <P> <!-- glibc!installazione!configurazione --> <P>Si crei una directory di nome compile in <CODE>glibc-2.0.6</CODE>, 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.) <BLOCKQUOTE><CODE> <PRE> mkdir compile cd compile </PRE> </CODE></BLOCKQUOTE> Si esegua <CODE>../configure</CODE>. 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 <CODE>/usr</CODE> è specificato su un sistema linux, configure sa come sistemare i percorsi rimanenti per disporre libc.so e le altre librerie importanti in <CODE>/lib</CODE>.) La linea completa di configurazione dovrebbe essere: <BLOCKQUOTE><CODE> <PRE> ../configure --enable-add-ons=linuxthreads,crypt,localedata --prefix=/usr </PRE> </CODE></BLOCKQUOTE> <P> <H3>Compilazione.</H3> <P> <!-- glibc!installazione!compilazione --> <P>Per compilare e verificare, si esegua: <BLOCKQUOTE><CODE> <PRE> make make check </PRE> </CODE></BLOCKQUOTE> <P> <P> <H2><A NAME="ss5.2">5.2 Prepararsi per l'installazione.</A> </H2> <P> <!-- glibc!installazione!prepararsi per --> <P>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. <P> <OL> <LI>Creare una nuova directory per contenere i vecchi file: <BLOCKQUOTE><CODE> <PRE> mkdir -p /usr/i486-linuxlibc5/lib </PRE> </CODE></BLOCKQUOTE> </LI> <LI>I vecchi file di header devono essere rimosssi da <CODE>/usr/include</CODE>: <BLOCKQUOTE><CODE> <PRE> mv /usr/include /usr/i486-linuxlibc5/include </PRE> </CODE></BLOCKQUOTE> </LI> <LI>Creare una nuova directory per i file include ed assegnare i collegamenti per includere altre directory: <BLOCKQUOTE><CODE> <PRE> 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++ </PRE> </CODE></BLOCKQUOTE> I collegamenti potrebbero essere diversi a seconda della distribuzione di cui si dispone. Ad esempio Slackware pone gli header g++ in <CODE>/usr/local/g++-include</CODE>, mentre Debian in <CODE>/usr/include/g++</CODE>, e collega <CODE>/usr/lib/g++-include</CODE> a <CODE>/usr/include/g++</CODE>. Nell'ultimo caso, probabilmente si desidererà spostare la directory originale di nuovo in <CODE>/usr/include</CODE>. </LI> <LI>Ripristinare ogni file di header o collegamento extra. Alcune librerie non standard come ncurses pongono i propri file in <CODE>/usr/include</CODE> oppure creano un link alla loro directory di include in <CODE>/usr/include</CODE>. È necessario ripristinare questi file e collegamenti al fine di poter usare correttamente le librerie extra. </LI> <LI>Aggiungere la nuova directory della libreria (ad esempio <CODE>/usr/i486-linuxlibc5/lib</CODE>) <EM>all'inizio</EM> del proprio file <CODE>/etc/ld.so.conf</CODE>. È necessario avere ld.so 1.8.8 (o più recente) per evitare alcuni strani messaggi una volta che glibc sia installata. </LI> <LI>Spostare/copiare tutte le librerie C vecchie nella nuova directory. <BLOCKQUOTE><CODE> <PRE> 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 </PRE> </CODE></BLOCKQUOTE> <CODE>libm.so.5</CODE> e <CODE>libc.so.5</CODE> dovrebbero essere copiate e non spostate se <CODE>/usr</CODE> è una partizione separata da <CODE>/</CODE>, in quanto sono necessarie per i programmi usati per far partire linux e devono risiedere nella partizione di root. </LI> <LI>Spostare i file <CODE>/usr/lib/*.o</CODE> nella nuova directory. <BLOCKQUOTE><CODE> <PRE> 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 </PRE> </CODE></BLOCKQUOTE> </LI> <LI>Aggiornare la propria cache dopo lo spostamento delle librerie <BLOCKQUOTE><CODE> <PRE> ldconfig -v </PRE> </CODE></BLOCKQUOTE> </LI> </OL> <P> <P> <H2><A NAME="ss5.3">5.3 Installare dal pacchetto binario.</A> </H2> <P> <!-- glibc!installazione!codice precompilato --> <P>Se si sta installando glibc da codice binario precompilato, si deve: <BLOCKQUOTE><CODE> <PRE> 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 </PRE> </CODE></BLOCKQUOTE> Con differenti archittetura o versione, sostituire i nomi di file adeguati. <P> <P> <H2><A NAME="ss5.4">5.4 Installare dai sorgenti.</A> </H2> <P> <!-- glibc!installazione!dai sorgenti --> <P>Per installare la libreria dai sorgenti, si esegua: <BLOCKQUOTE><CODE> <PRE> make install ldconfig -v </PRE> </CODE></BLOCKQUOTE> <P> <P> <H2><A NAME="ss5.5">5.5 Aggiornare i file specs di gcc.</A> </H2> <P> <!-- glibc!installazione!gcc file specs, aggiornamento --> <P>Il passo finale dell'installazione (sia nel caso di codice binario che sorgente) è di aggionrare il file <CODE>specs</CODE> di gcc, in modo da poter collegare correttamente i propri programmi. Per determinare quale file specs sia quello usato da gcc, si usi: <BLOCKQUOTE><CODE> <PRE> % gcc -v reading specs from /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2/specs gcc version 2.7.2.2 </PRE> </CODE></BLOCKQUOTE> <P>In questo caso i486-unknown-linux è il sistema, e 2.7.2.2 la versione. È necessario copiare il file <CODE>/usr/lib/gcc-lib/<system></CODE> nella vecchia directory di sistema <BLOCKQUOTE><CODE> <PRE> cd /usr/lib/gcc-lib/ cp -r i486-unknown-linux i486-linuxlibc5 </PRE> </CODE></BLOCKQUOTE> <P>Andare nella directory originale e quella di versione <BLOCKQUOTE><CODE> <PRE> cd /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2 </PRE> </CODE></BLOCKQUOTE> <P>per modificare il file <CODE>specs</CODE> presente in questa directory. Nel file, si cambi <CODE>/lib/ld-linux.so.1</CODE> in <CODE>/lib/ld-linux.so.2</CODE>. Inoltre è necessario rimuovere tutte le espressioni <CODE>%{...:-lgmon}</CODE> 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 <A HREF="Glibc2-HOWTO-9.html#specs">Esempio di file specs</A>. <P> <P> <H2><A NAME="ss5.6">5.6 Controllare la propria installazione.</A> </H2> <P> <!-- glibc!installazione!controllare --> <P>Per verificare l'installazione, si crei il seguente programma in un file glibc.c: <BLOCKQUOTE><CODE> <PRE> #include <stdio.h> main() { printf("hello world!\n"); } </PRE> </CODE></BLOCKQUOTE> e si compili il programma. <BLOCKQUOTE><CODE> <PRE> % gcc glibc.c -o glibc </PRE> </CODE></BLOCKQUOTE> Usando ldd è possibile verificare che il programma è stato collegato con glibc2 e non la vecchia libc: <BLOCKQUOTE><CODE> <PRE> % ldd glibc libc.so.6 => /lib/libc.so.6 (0x4000e000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) </PRE> </CODE></BLOCKQUOTE> Se il programma si compila e genera "hello world!" quando eseguito, l'installazione è corretta. <P> <HR> <A HREF="Glibc2-HOWTO-6.html">Avanti</A> <A HREF="Glibc2-HOWTO-4.html">Indietro</A> <A HREF="Glibc2-HOWTO.html#toc5">Indice</A> </BODY> </HTML>