<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édez en tapant <CODE>gcc -v</CODE> lors de l'invite. C'est également une bonne technique pour savoir si votre configuration est ELF ou a.out. Sur mon systè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 à remarquer <UL> <LI> <CODE>i486</CODE>. Cela vous indique que la version de gcc que vous utilisez a été compilée pour être utilisée sur un processeur 486 --- mais vous pouvez avoir un autre processeur comme un 386 ou un Pentium (586). Tous ces processeurs peuvent exécuter le code compilé avec n'importe quel processeur. La seule différence réside dans le fait que le code 486 rajoute un peu de code à certains endroits pour aller plus vite sur un 486. Cela n'a pas d'effet néfaste côté performance sur un 386 mais cela rend les exécutables un peu plus importants. </LI> <LI> <CODE>zorglub</CODE>. Ce n'est pas réellement important, et il s'agit généralement d'un commentaire (comme <CODE>slackware</CODE> or <CODE>debian</CODE>) ou même, cela peut-être vide (lorsque vous avez comme nom de répertoire <CODE>i486-linux</CODE>). Si vous construisez votre propre gcc, vous pouvez fixer ce paramètre selon vos désirs, comme je l'ai fait. <CODE>:-)</CODE> </LI> <LI> <CODE>linux</CODE>. Cela peut être à la place <CODE>linuxelf</CODE> ou <CODE>linuxaout</CODE> et en fait, la signification varie en fonction de la version que vous possédez. <UL> <LI> <CODE>linux</CODE> signifie ELF si la version est 2.7.0 ou supérieure, sinon, c'est du a.out. </LI> <LI><CODE>linuxaout</CODE> signifie a.out. Cela a été introduit comme cible lorsque le format des binaires a changé de a.out vers ELF dans <B>Linux</B>. Normalement, vous ne verrez plus de <CODE>linuxaout</CODE> avec une version de gcc supérieure à 2.7.0. <A NAME="index.15"></A> </LI> <LI><CODE>linuxelf</CODE> est dépassé. Il s'agit généralement de gcc version 2.6.3 configuré pour générer des exécutables ELF. Notez que gcc 2.6.3 est connu pour générer de nombreuses erreurs lorsqu'il produit du code ELF --- une mise à jour est très fortement recommandée. </LI> </UL> </LI> <LI> <CODE>2.7.2</CODE> est le numéro de la version de GCC.</LI> </UL> </P> <P>Donc, en résumé, nous possédons gcc 2.7.2 qui génère du code ELF. <EM>Quelle surprise</EM> (NdT: En franç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é gcc sans regarder, ou bien si vous l'avez eu à partir d'une distribution, vous pouvez avoir envie de savoir où 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épertoires) est généralement l'endroit où se trouve le plus souvent le compilateur. Ceci inclut les exécutables qui réalisent la compilation ainsi que certaines bibliothèques et quelques fichiers d'en-tête. </LI> <LI> <CODE>/usr/bin/gcc</CODE> est le lanceur du compilateur --- c'est en fait le programme que vous lancez. Il peut être utilisé avec plusieurs versions de gcc lorsque vous possédez plusieurs répertoires installés (voir plus bas). Pour trouver la version par défaut utilisé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é plusieurs cibles possibles (par exemple a.out et elf, ou bien un compilateur croisé, les bibliothèques, les binutils (<CODE>as</CODE>, <CODE>ld</CODE>, etc.) et les fichiers d'en-tête pour les cibles différente de celle par défaut peuvent être trouvés à cet endroit. Même si vous n'avez qu'une seule version de gcc installée, vous devriez toutefois trouver à 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épertoires pour les bibliothèques pour le système initial. Vous aurez également besoin du programme <CODE>/lib/cpp</CODE> pour un grand nombre d'applications (X l'utilise beaucoup) --- soit vous le copiez à 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ù se trouvent les fichiers d'en-tête ? </H2> <P>Si l'on excepte les fichier fichiers d'en-tête que vous installez dans le répertoire <CODE>/usr/local/include</CODE>, il y a en fait trois types de fichiers d'en-tête :</P> <P> <UL> <LI> La grande majorité des fichiers situés dans le répertoire <CODE>/usr/include/</CODE> et dans ses sous-répertoires proviennent du paquetage de la libc dont s'occupe H.J. Lu. Je dis bien la "grande majorité" car vous pouvez avoir également certains fichiers provenant d'autres sources (par exemple des bibliothèques <CODE>curses</CODE> et <CODE>dbm</CODE>), ceci est d'autant plus vrai si vous possédez une distribution de la libc récente (où les bibliothèques curses et dbm ne sont pas intégrées). <A NAME="index.18"></A> <A NAME="index.19"></A> </LI> <LI> Les répertoires <CODE>/usr/include/linux</CODE> et <CODE>/usr/include/asm</CODE> (pour les fichiers <CODE><linux/*.h></CODE> et <CODE><asm/*.h></CODE>) doivent être des liens symboliques vers les répertoires <CODE>linux/include/linux</CODE> et <CODE>linux/include/asm</CODE> situés dans les sources du noyau. Vous devrez installer ces sources si vous désirez pouvoir développer : ces sources ne sont pas utilisé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épertoire des sources du noyau après les avoir installés. Beaucoup de fichiers ont besoin du fichier d'en-tête <CODE><linux/autoconf.h></CODE> qui n'existe pas sans cette commande. Il est à noter que dans certaines versions du noyau, le répertoire <CODE>asm</CODE> est en fait un lien symbolique qui n'est créé qu'avec l'exécution de <CODE>make config</CODE>. Donc, si vous installez les sources du noyau dans le ré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><float.h></CODE>, <CODE><limits.h></CODE>, <CODE><varargs.h></CODE>, <CODE><stdarg.h></CODE> et <CODE><stddef.h></CODE> changent en fonction de la version du compilateur, et peuvent être trouvés dans le ré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é</H2> <H3>Linux comme plate-forme de destination</H3> <P> Nous supposons que vous avez récupéré les sources de gcc, et normalement, il vous suffit de suivre les instructions données dans le fichier <CODE>INSTALL</CODE> situé 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 à noter que vous aurez besoin des fichiers d'en-tête de Linux, ainsi que les sources de l'assembleur et du l'éditeur de liens croisé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é 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écédent</A> <P> Table des matières de <A HREF="GCC-HOWTO.html#toc3">ce chapitre</A>, <A HREF="GCC-HOWTO.html#toc">Table des matières</A> générale</P> <P> <A HREF="GCC-HOWTO.html">Début</A> du document, <A HREF="#0"> Début de ce chapitre</A></P> </BODY> </HTML>