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) !
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.
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 :
/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).
/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 .
<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
.
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/.
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 !