Page suivante - Page précédente - Table des matières

3. Installation et configuration de GCC

3.1 Les versions de GCC

Vous pouvez savoir quelle est la version de GCC que vous possédez en tapant gcc -v 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 :

$ gcc -v
Reading specs from /usr/lib/gcc-lib/i486-zorglub-linux/2.7.2/specs
gcc version 2.7.2

Les mots-clefs à remarquer

  • i486. 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.
  • zorglub. Ce n'est pas réellement important, et il s'agit généralement d'un commentaire (comme slackware or debian) ou même, cela peut-être vide (lorsque vous avez comme nom de répertoire i486-linux). Si vous construisez votre propre gcc, vous pouvez fixer ce paramètre selon vos désirs, comme je l'ai fait. :-)
  • linux. Cela peut être à la place linuxelf ou linuxaout et en fait, la signification varie en fonction de la version que vous possédez.
    • linux signifie ELF si la version est 2.7.0 ou supérieure, sinon, c'est du a.out.
    • linuxaout signifie a.out. Cela a été introduit comme cible lorsque le format des binaires a changé de a.out vers ELF dans Linux. Normalement, vous ne verrez plus de linuxaout avec une version de gcc supérieure à 2.7.0.
    • linuxelf 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.
  • 2.7.2 est le numéro de la version de GCC.

Donc, en résumé, nous possédons gcc 2.7.2 qui génère du code ELF. Quelle surprise (NdT: En français dans le texte) !

3.2 A quel endroit s'installe GCC ?

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

  • /usr/lib/gcc-lib/machine-cible/version/ (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.
  • /usr/bin/gcc 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 gcc -v. Pour forcer l'utilisation d'une autre version, lancez gcc -V version. Par exemple,
    # 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
    
  • /usr/machine-cible/(bin|lib|include)/. Si vous avez installé plusieurs cibles possibles (par exemple a.out et elf, ou bien un compilateur croisé, les bibliothèques, les binutils (as, ld, 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 /usr/(bin|lib|include).
  • /lib/, /usr/lib et autres sont les répertoires pour les bibliothèques pour le système initial. Vous aurez également besoin du programme /lib/cpp pour un grand nombre d'applications (X l'utilise beaucoup) --- soit vous le copiez à partir de /usr/lib/gcc-lib/machine-cible/version/, soit vous faites pointer un lien symbolique dessus.

3.3 Où se trouvent les fichiers d'en-tête ?

Si l'on excepte les fichier fichiers d'en-tête que vous installez dans le répertoire /usr/local/include, il y a en fait trois types de fichiers d'en-tête :

  • La grande majorité des fichiers situés dans le répertoire /usr/include/ 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 curses et dbm), 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).
  • Les répertoires /usr/include/linux et /usr/include/asm (pour les fichiers <linux/*.h> et <asm/*.h>) doivent être des liens symboliques vers les répertoires linux/include/linux et linux/include/asm 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 make config 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 <linux/autoconf.h> qui n'existe pas sans cette commande. Il est à noter que dans certaines versions du noyau, le répertoire asm est en fait un lien symbolique qui n'est créé qu'avec l'exécution de make config. Donc, si vous installez les sources du noyau dans le répertoire /usr/src/linux, il suffit de faire :
    $ 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 .
    
  • Les fichiers tels que <float.h>, <limits.h>, <varargs.h>, <stdarg.h> et <stddef.h> changent en fonction de la version du compilateur, et peuvent être trouvés dans le répertoire /usr/lib/gcc-lib/i486-box-linux/2.7.2/include/ pour la version 2.7.2.

3.4 Construire un compilateur croisé

Linux comme plate-forme de destination

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 INSTALL situé dans les sources de gcc. Ensuite, il suffit de lancer configure --target=i486-linux --host=XXX sur une plateforme XXX, puit un make 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 ftp://tsx-11.mit.edu/pub/linux/packages/GCC/ ou ftp://ftp.ibp.fr/pub/linux/GCC/.

Linux comme plate-forme origine et MSDOS comme destination

Arggg. Apparemment, cela est possible en utilisant le paquetage « emx » ou l'extension « go ». Regardez ftp://sunsite.unc.edu/pub/Linux/devel/msdos pour plus d'informations.

Je n'ai pas testé cela et je ne pense pas le faire !


Page suivante - Page précédente - Table des matières