Sophie

Sophie

distrib > Mandriva > 9.0 > i586 > by-pkgid > 0d5cd12c82d627a82c59047e1ba7b8a9 > files > 397

howto-html-fr-9.0-0.2mdk.noarch.rpm

<HTML>
<HEAD>
<TITLE>Installation et configuration de GCC </TITLE>
</HEAD>
<BODY>
<H1>3. <A NAME="s3"></A>Installation et configuration de GCC </H1>
<P>
<A HREF="GCC-HOWTO.html#toc3">Contenu de cette section</A></P>

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

<P> Vous pouvez savoir quelle est la version de GCC que vous poss&eacute;dez en
tapant <CODE>gcc -v</CODE> lors de l'invite. C'est &eacute;galement une bonne
technique pour savoir si votre configuration est ELF ou a.out.
Sur mon syst&egrave;me, cela donne ceci :
<BLOCKQUOTE><CODE>
<PRE>
$ gcc -v
Reading specs from /usr/lib/gcc-lib/i486-zorglub-linux/2.7.2/specs
gcc version 2.7.2
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>
<P> Les mots-clefs &agrave; remarquer
<UL>
<LI> <CODE>i486</CODE>.  Cela vous indique que la version de gcc que vous utilisez 
a &eacute;t&eacute; compil&eacute;e pour &ecirc;tre utilis&eacute;e sur un processeur 486 --- mais vous pouvez
avoir un autre processeur comme un 386 ou un Pentium (586).
Tous ces processeurs peuvent ex&eacute;cuter le code compil&eacute; avec n'importe 
quel processeur. La seule diff&eacute;rence r&eacute;side dans le fait que le 
code 486 rajoute  un peu de code &agrave; certains endroits pour
aller plus vite sur un 486. Cela n'a pas d'effet n&eacute;faste c&ocirc;t&eacute;
performance sur un 386 mais cela rend les ex&eacute;cutables un peu plus
importants.
</LI>
<LI> <CODE>zorglub</CODE>.  Ce n'est pas r&eacute;ellement important, et il s'agit 
g&eacute;n&eacute;ralement d'un commentaire (comme <CODE>slackware</CODE> or <CODE>debian</CODE>) 
ou m&ecirc;me, cela peut-&ecirc;tre vide (lorsque vous avez comme nom
de r&eacute;pertoire  <CODE>i486-linux</CODE>).  Si vous construisez votre propre
gcc, vous pouvez fixer ce param&egrave;tre selon vos d&eacute;sirs, comme je l'ai fait.
<CODE>:-)</CODE>
</LI>
<LI> <CODE>linux</CODE>.  Cela peut &ecirc;tre &agrave; la place <CODE>linuxelf</CODE> ou
<CODE>linuxaout</CODE> et en fait, la signification varie en fonction de la
version que vous poss&eacute;dez.

<UL>
<LI> <CODE>linux</CODE> signifie ELF si la version est 2.7.0 ou sup&eacute;rieure, sinon,
c'est du a.out.
</LI>
<LI><CODE>linuxaout</CODE> signifie a.out.  Cela a &eacute;t&eacute; introduit comme
cible lorsque le format des binaires a chang&eacute; de a.out vers ELF
dans <B>Linux</B>. Normalement, vous ne verrez plus de 
<CODE>linuxaout</CODE> avec une version de gcc sup&eacute;rieure &agrave; 2.7.0.

<A NAME="index.15"></A> 
 </LI>
<LI><CODE>linuxelf</CODE> est d&eacute;pass&eacute;. Il s'agit g&eacute;n&eacute;ralement de gcc version
2.6.3 configur&eacute; pour g&eacute;n&eacute;rer des ex&eacute;cutables ELF. Notez que gcc 2.6.3
est connu pour g&eacute;n&eacute;rer de nombreuses erreurs lorsqu'il produit du code
ELF --- une mise &agrave; jour est tr&egrave;s fortement recommand&eacute;e.
</LI>
</UL>
</LI>
<LI> <CODE>2.7.2</CODE> est le num&eacute;ro de la version de GCC.</LI>
</UL>
</P>
<P>Donc, en r&eacute;sum&eacute;, nous poss&eacute;dons gcc 2.7.2 qui g&eacute;n&egrave;re du code ELF.  
<EM>Quelle surprise</EM> (NdT: En fran&ccedil;ais dans le texte) !</P>
<P></P>

<H2>3.2 <A NAME="ss3.2"></A> A quel endroit s'installe GCC ? </H2>

<P>Si vous avez install&eacute; gcc sans regarder, ou bien si vous l'avez eu
&agrave; partir d'une distribution, vous pouvez avoir envie de savoir
o&ugrave; il se trouve dans votre arborescence. Les mots clefs 
permettant cela sont</P>
<P>
<UL>
<LI> <CODE>/usr/lib/gcc-lib/</CODE><EM>machine-cible</EM><CODE>/</CODE><EM>version</EM><CODE>/</CODE> (et ses sous-r&eacute;pertoires) 
est g&eacute;n&eacute;ralement l'endroit o&ugrave; se trouve le plus souvent le compilateur.
Ceci inclut les ex&eacute;cutables qui r&eacute;alisent la compilation ainsi
que certaines biblioth&egrave;ques et quelques fichiers d'en-t&ecirc;te.
</LI>
<LI> <CODE>/usr/bin/gcc</CODE> est le lanceur du compilateur --- 
c'est en fait le programme que vous lancez.  Il peut &ecirc;tre utilis&eacute;
avec plusieurs versions de gcc lorsque vous poss&eacute;dez plusieurs r&eacute;pertoires
install&eacute;s (voir plus bas). Pour trouver la version par d&eacute;faut utilis&eacute;e, 
lancez <CODE>gcc -v</CODE>.  Pour forcer l'utilisation d'une autre
version, lancez <CODE>gcc -V </CODE><EM>version</EM>. Par exemple,

<BLOCKQUOTE><CODE>
<PRE>
# gcc -v
Reading specs from /usr/lib/gcc-lib/i486-zorglub-linux/2.7.2/specs
gcc version 2.7.2
# gcc -V 2.6.3 -v
Reading specs from /usr/lib/gcc-lib/i486-zorglub-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><EM>machine-cible</EM><CODE>/(bin|lib|include)/</CODE>. 
Si vous avez install&eacute; plusieurs cibles possibles (par exemple a.out et elf, 
ou bien un compilateur crois&eacute;, les biblioth&egrave;ques, les binutils 
(<CODE>as</CODE>, <CODE>ld</CODE>, etc.) et les fichiers d'en-t&ecirc;te  pour 
les cibles diff&eacute;rente de celle par d&eacute;faut peuvent &ecirc;tre trouv&eacute;s &agrave; cet endroit.
M&ecirc;me si vous n'avez qu'une seule version de gcc install&eacute;e, vous devriez
toutefois trouver &agrave; cet endroit un certain nombre de fichiers. Si ce n'est pas
la cas, regardez dans <CODE>/usr/(bin|lib|include)</CODE>.
</LI>
<LI> <CODE>/lib/</CODE>, <CODE>/usr/lib</CODE> et autres sont les r&eacute;pertoires
pour les biblioth&egrave;ques pour le syst&egrave;me initial. Vous aurez &eacute;galement besoin
du programme <CODE>/lib/cpp</CODE> pour un grand nombre d'applications
(X l'utilise beaucoup) --- soit vous le copiez &agrave; partir de 
<CODE>/usr/lib/gcc-lib/</CODE><EM>machine-cible</EM><CODE>/</CODE><EM>version</EM><CODE>/</CODE>, soit vous faites  pointer un lien symbolique dessus.

<A NAME="index.16"></A> 
 </LI>
</UL>
</P>
<P></P>

<A NAME="index.17"></A> <H2>3.3 <A NAME="ss3.3"></A> O&ugrave; se trouvent les fichiers d'en-t&ecirc;te ? </H2>

<P>Si l'on excepte les fichier fichiers d'en-t&ecirc;te que vous installez
dans le r&eacute;pertoire <CODE>/usr/local/include</CODE>,  il y a en fait
trois types de fichiers d'en-t&ecirc;te :</P>
<P>
<UL>
<LI> La grande majorit&eacute; des fichiers situ&eacute;s dans le r&eacute;pertoire
<CODE>/usr/include/</CODE> et dans ses sous-r&eacute;pertoires proviennent 
du paquetage de la libc dont s'occupe H.J. Lu. Je dis bien
la "grande  majorit&eacute;" car vous pouvez avoir &eacute;galement certains 
fichiers provenant d'autres sources (par exemple des 
biblioth&egrave;ques <CODE>curses</CODE> et <CODE>dbm</CODE>), ceci est d'autant plus vrai 
si vous poss&eacute;dez une distribution de la libc 
r&eacute;cente (o&ugrave; les biblioth&egrave;ques curses et dbm ne sont pas int&eacute;gr&eacute;es).

<A NAME="index.18"></A> 
 
<A NAME="index.19"></A> 
 
</LI>
<LI> Les r&eacute;pertoires <CODE>/usr/include/linux</CODE> 
et <CODE>/usr/include/asm</CODE> (pour les fichiers
<CODE>&lt;linux/*.h&gt;</CODE> et <CODE>&lt;asm/*.h&gt;</CODE>)
doivent &ecirc;tre des liens symboliques vers les r&eacute;pertoires
<CODE>linux/include/linux</CODE> et <CODE>linux/include/asm</CODE> situ&eacute;s dans
les sources du noyau. Vous devrez installer ces sources si vous d&eacute;sirez
pouvoir d&eacute;velopper : ces sources ne sont pas utilis&eacute;s uniquement
pour compiler le noyau.

Il est probable que vous ayez besoin de lancer la commande suivante
<CODE>make config</CODE> dans le r&eacute;pertoire des sources du noyau
apr&egrave;s les avoir install&eacute;s. Beaucoup de fichiers ont besoin
du fichier d'en-t&ecirc;te <CODE>&lt;linux/autoconf.h&gt;</CODE> 
qui n'existe pas sans cette commande. Il est &agrave; noter que dans 
certaines versions du noyau, le r&eacute;pertoire <CODE>asm</CODE> 
est en fait un lien symbolique qui n'est cr&eacute;&eacute; qu'avec l'ex&eacute;cution de
<CODE>make config</CODE>.

Donc, si vous installez les sources du noyau dans le r&eacute;pertoire
<CODE>/usr/src/linux</CODE>, il suffit de faire :
<BLOCKQUOTE><CODE>
<PRE>
$ cd /usr/src/linux
$ su
# make config
[repondez aux questions. A moins que vous ne recompiliez votre
noyau, les reponses importent peu]
# cd /usr/include
# ln -s ../src/linux/include/linux .
# ln -s ../src/linux/include/asm .
</PRE>
</CODE></BLOCKQUOTE>


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

</LI>
<LI> Les fichiers tels que <CODE>&lt;float.h&gt;</CODE>, <CODE>&lt;limits.h&gt;</CODE>,
<CODE>&lt;varargs.h&gt;</CODE>, <CODE>&lt;stdarg.h&gt;</CODE> et
<CODE>&lt;stddef.h&gt;</CODE> changent en fonction de la version du compilateur, et
peuvent &ecirc;tre trouv&eacute;s dans le r&eacute;pertoire 
<CODE>/usr/lib/gcc-lib/i486-box-linux/2.7.2/include/</CODE> pour la version
<CODE>2.7.2</CODE>.
</LI>
</UL>
</P>
<P></P>

<H2>3.4 <A NAME="ss3.4"></A> Construire un compilateur crois&eacute;</H2>

<H3>Linux comme plate-forme de destination</H3>

<P> Nous supposons que vous avez r&eacute;cup&eacute;r&eacute; les sources de gcc, et normalement,
il vous suffit de suivre les instructions donn&eacute;es dans le fichier 
<CODE>INSTALL</CODE> situ&eacute; dans les sources de gcc. Ensuite, il suffit de lancer
<CODE>configure --target=i486-linux --host=XXX</CODE> sur une plateforme <CODE>XXX</CODE>,
puit un <CODE>make</CODE> devrait compiler gcc correctement. Il est &agrave; noter 
que vous aurez besoin des fichiers d'en-t&ecirc;te de Linux, ainsi que les sources
de l'assembleur et du l'&eacute;diteur de liens crois&eacute;s que vous pouvez trouver
sur 
<A HREF="ftp://tsx-11.mit.edu/pub/linux/packages/GCC/">ftp://tsx-11.mit.edu/pub/linux/packages/GCC/</A>
 ou
<A HREF="ftp://ftp.ibp.fr/pub/linux/GCC/">ftp://ftp.ibp.fr/pub/linux/GCC/</A>
.</P>
<P></P>
<H3>Linux comme plate-forme origine et MSDOS comme destination</H3>

<P> Arggg.  Apparemment, cela est possible en utilisant
le paquetage " emx " ou l'extension " go ". Regardez 
<A HREF="ftp://sunsite.unc.edu/pub/Linux/devel/msdos">ftp://sunsite.unc.edu/pub/Linux/devel/msdos</A>
 pour plus 
d'informations.</P>
<P>Je n'ai pas test&eacute; cela et je ne pense pas le faire !</P>
<P></P>

<HR>
<P>
Chapitre <A HREF="GCC-HOWTO-4.html">suivant</A>,
Chapitre <A HREF="GCC-HOWTO-2.html">Pr&eacute;c&eacute;dent</A>
<P>
Table des mati&egrave;res de <A HREF="GCC-HOWTO.html#toc3">ce chapitre</A>,
 <A HREF="GCC-HOWTO.html#toc">Table des mati&egrave;res</A> g&eacute;n&eacute;rale</P>
<P>
<A HREF="GCC-HOWTO.html">D&eacute;but</A> du document,
 <A HREF="#0"> D&eacute;but de ce chapitre</A></P>
</BODY>
</HTML>