Sophie

Sophie

distrib > Mandriva > 9.1 > i586 > by-pkgid > f1098342ec4a2b28475e34123ce17201 > files > 291

howto-html-it-9.1-0.5mdk.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<TITLE>The Linux GCC HOWTO : Installazione e impostazione di GCC</TITLE>
<LINK HREF="GCC-HOWTO-4.html" REL=next>
<LINK HREF="GCC-HOWTO-2.html" REL=previous>
<LINK HREF="GCC-HOWTO.html#toc3" REL=contents>
</HEAD>
<BODY>
<A HREF="GCC-HOWTO-4.html">Avanti</A>
<A HREF="GCC-HOWTO-2.html">Indietro</A>
<A HREF="GCC-HOWTO.html#toc3">Indice</A>
<HR>
<H2><A NAME="s3">3. Installazione e impostazione di GCC</A></H2>

<H2><A NAME="index.14"></A> <A NAME="index.13"></A> <A NAME="index.12"></A> <A NAME="ss3.1">3.1 Versioni GCC</A>
</H2>

<P>&Egrave; possibile scoprire quale versione GCC si sta eseguendo digitando 
<CODE>gcc -v</CODE> alla richiesta dell'interprete comandi. Si tratta di un 
metodo piuttosto affidabile anche per scoprire se la propria impostazione 
&egrave; ELF o a.out. Il risultato potrebbe essere:
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ gcc -v
Reading specs from /usr/lib/gcc-lib/i486-box-linux/2.7.2/specs
gcc version 2.7.2
</PRE>
</CODE></BLOCKQUOTE>
<P>Le cose da notare sono:
<P>
<DL>
<DT><B>i486</B><DD><P>Indica che il gcc &egrave; stato compilato per un processore 486 
- altre possibilit&agrave; sono 386 o 586. Tutti i processori possono 
eseguire il codice compilato per ciascuna delle altre versioni; la 
differenza consiste nell'ottimizzazione che non ha effetti 
sulle prestazioni in un 386, ma rende il codice eseguibile leggermente pi&ugrave; 
grande.
<P>
<DT><B>box</B><DD><P>Non &egrave; affatto importante, potrebbe esserci qualcosa di 
diverso (come <CODE>slackware</CODE> o <CODE>debian</CODE>) o anche nulla (in tal caso, il 
nome di directory completa sar&agrave; <CODE>i486-linux</CODE>). Se si esegue 
personalmente la compilazione di gcc, &egrave; possibile impostare questa 
caratteristica al momento della compilazione, a fini puramente estetici. 
<P>
<DT><B>linux</B><DD><P>In alternativa, potrebbe essere <CODE>linuxelf</CODE>
o <CODE>linuxaout</CODE>, il significato varia a seconda della versione 
utilizzata, fatto che potrebbe confondere le idee. 
<P>
<DL>
<DT><B>linux</B><DD><P>significa ELF se la versione &egrave; la 2.7.0 o seguente, 
altrimenti significa a.out.
<P>
<DT><B>linuxaout</B><DD><P>significa a.out. &Egrave; stato introdotto quando la definizione 
di <CODE>linux</CODE> &egrave; stata modificata da a.out in ELF, in modo che non sia
possibile vedere un gcc <CODE>linuxaout</CODE> pi&ugrave; vecchio della versione 
2.7.0.
<P>
<A NAME="index.15"></A> <DT><B>linuxelf</B><DD><P>&egrave; obsoleto. Si tratta generalmente di una versione 
di gcc 2.6.3 impostata per produrre eseguibili ELF. Si noti che 
il gcc 2.6.3 contiene degli errori nella produzione di codice per 
ELF - si consiglia un aggiornamento.
</DL>
<P>
<DT><B>2.7.2</B><DD><P>numero della versione.
</DL>
<P>In conclusione, si tratta di gcc 2.7.2 che produce del codice ELF.
<P>
<H2><A NAME="ss3.2">3.2 Dov'&egrave; finito?</A>
</H2>

<P>Se gcc &egrave; stato installato senza prestare attenzione, oppure se &egrave; stato 
ottenuto come parte di una distribuzione, potrebbe essere necessario 
scoprire dove si trova all'interno del filesystem. Le parti chiave sono:
<P>
<UL>
<LI> <CODE>/usr/lib/gcc-lib/</CODE><B>destinazione</B><CODE>/</CODE><B>versione</B><CODE>/</CODE> 
(e sottodirectory) posto in cui si trova la maggior parte del 
compilatore, i programmi eseguibili che effettuano la 
compilazione, alcune librerie e file include specifici per la versione che 
si sta utilizzando. 
</LI>
<LI> <CODE>/usr/bin/gcc</CODE> driver del compilatore - la parte che si  
esegue dalla riga di comando. Pu&ograve; essere utilizzato con diverse versioni di 
gcc, a patto che siano state installate pi&ugrave; directory di compilatore (come 
descritto sopra). Per scoprire la versione predefinita, digitare 
<CODE>gcc -v</CODE>. Per forzare un'altra versione, digitare <CODE>gcc -V</CODE>
<B>versione</B>. Ad esempio:

<BLOCKQUOTE><CODE>
<PRE>
# gcc -v
Reading specs from /usr/lib/gcc-lib/i486-box-linux/2.7.2/specs
gcc version 2.7.2
# gcc -V 2.6.3 -v
Reading specs from /usr/lib/gcc-lib/i486-box-linux/2.6.3/specs
gcc driver version 2.7.2 executing gcc version 2.6.3
</PRE>
</CODE></BLOCKQUOTE>

</LI>
<LI> <CODE>/usr/</CODE><B>destinazione</B><CODE>/(bin|lib|include)/</CODE>. Se sono 
stati installati pi&ugrave; destinazioni (target) (ad esempio, a.out ed elf, o un
cross compilatore di qualche tipo), le librerie, le binutils (come <CODE>as</CODE>,
<CODE>ld</CODE> o altri) e gli header file per destinazioni non native possono
essere trovati in questa posizione. Se &egrave; stato installato un solo tipo di 
gcc, diverse parti di esso sono poste o in questa directory o, 
alternativamente, in <CODE>/usr/(bin|lib|include)</CODE>.
</LI>
<LI> <CODE>/lib/</CODE>, <CODE>/usr/lib</CODE> e altre sono directory di libreria per 
il sistema nativo. Sar&agrave; anche necessaria la directory <CODE>/lib/cpp</CODE>
per molte applicazioni (ad esempio X ne fa un grande utilizzo) - &egrave; 
possibile copiarla da <CODE>/usr/lib/gcc-lib/destinazione/versione/</CODE>
o creare un collegamento (link) simbolico.

<A NAME="index.16"></A> </LI>
</UL>
<P>
<H2><A NAME="index.17"></A> <A NAME="ss3.3">3.3 Dove si trovano gli header file?</A>
 </H2>

<P>Indipendentemente dalla posizione in cui sono stati installati i propri,
sotto <CODE>/usr/local/include</CODE>, esistono tre sorgenti principali degli 
header file in Linux:
<P>
<UL>
<LI>la maggior parte di <CODE>/usr/include/</CODE> e relative subdirectory 
sono sostituiti con il pacchetto binario di libc da H. J. Lu.  
In tali posizioni si potrebbero anche trovare file da altri sorgenti 
(librerie <B>curses</B> e <B>dbm</B>, ad esempio) specialmente se si sta 
utilizzando la distribuzione libc pi&ugrave; recente (che non contiene curses o 
dbm, come invece accadeva nelle pi&ugrave; vecchie). 

<A NAME="index.18"></A>  
<A NAME="index.19"></A>  
</LI>
<LI><CODE>/usr/include/linux</CODE> e <CODE>/usr/include/asm</CODE> (per i file 
<CODE>&lt;linux/*.h&gt;</CODE> e <CODE>&lt;asm/*.h&gt;</CODE>) dovrebbero essere 
link simbolici alle directory <CODE>linux/include/linux</CODE> e 
<CODE>linux/include/asm</CODE> nella distribuzione sorgente del kernel. &Egrave; 
necessario installarli se si pensa di eseguire lo sviluppo di un qualsiasi
programma non banale; non servono solo per la compilazione del kernel.
<P>Potrebbe essere anche necessario eseguire il <CODE>make config</CODE> nelle 
directory del kernel dopo aver scaricato i sorgenti. Molti 
file dipendono da <CODE>&lt;linux/autoconf.h&gt;</CODE> che potrebbe non 
esistere, e in alcune versioni di kernel, <CODE>asm</CODE> &egrave; un link 
simbolico che viene creato al momento del <CODE>make config</CODE>.  Pertanto, se 
si scaricano i sorgenti del kernel sotto <CODE>/usr/src/linux</CODE>:
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ cd /usr/src/linux
$ su
# make config
[rispondere alle domande. A meno che non si abbia intenzione di
 proseguire con la compilazione del kernel, la risposta non ha
 molta importanza]
# cd /usr/include
# ln -s ../src/linux/include/linux .
# ln -s ../src/linux/include/asm .
</PRE>
</CODE></BLOCKQUOTE>
<P>
<A NAME="index.20"></A> 
<A NAME="index.21"></A> 
<A NAME="index.22"></A> 
<A NAME="index.23"></A> 
<A NAME="index.24"></A> <P>
</LI>
<LI>File come <CODE>&lt;float.h&gt;</CODE>, <CODE>&lt;limits.h&gt;</CODE>, 
<CODE>&lt;varargs.h&gt;</CODE>, <CODE>&lt;stdarg.h&gt;</CODE> e
<CODE>&lt;stddef.h&gt;</CODE> variano a seconda della versione del compilatore, 
pertanto si trovano in 
<CODE>/usr/lib/gcc-lib/i486-box-linux/2.7.2/include/</CODE>
e posizioni simili. </LI>
</UL>
<P>
<H2><A NAME="ss3.4">3.4 Compilazione di cross compilatori</A>
</H2>

<H3>Linux come piattaforma di destinazione</H3>

<P>Supponendo di aver ottenuto il codice sorgente per gcc, solitamente &egrave; 
sufficiente seguire le istruzioni contenute nel file <CODE>INSTALL</CODE>
di GCC. Un comando <CODE>configure -target=i486-linux -host=XXX</CODE>
sulla piattaforma <CODE>XXX</CODE> seguito da un <CODE>make</CODE> dovrebbe funzionare. Si 
noti che saranno necessari gli include di Linux, gli include 
del kernel e sar&agrave; necessario eseguire anche la compilazione 
del cross assembler e del cross linker dai sorgenti in 
<A HREF="ftp://tsx-11.mit.edu/pub/linux/packages/GCC/">ftp://tsx-11.mit.edu/pub/linux/packages/GCC/</A>.
<P>
<H3>Linux come piattaforma sorgente, MSDOS come destinazione</H3>

<P>Apparentemente dovrebbe essere possibile utilizzando il pacchetto 
"emx" o l'extender "go". Si invita a dare un'occhiata a
<A HREF="ftp://sunsite.unc.edu/pub/Linux/devel/msdos">ftp://sunsite.unc.edu/pub/Linux/devel/msdos</A>.
<P>L'autore, non ha ancora verificato le funzionalit&agrave; e pertanto non pu&ograve; 
dare alcuna garanzia in merito.
<P>
<HR>
<A HREF="GCC-HOWTO-4.html">Avanti</A>
<A HREF="GCC-HOWTO-2.html">Indietro</A>
<A HREF="GCC-HOWTO.html#toc3">Indice</A>
</BODY>
</HTML>