Première compilation avec GCC sous Linux
(Vos commentaires sont les bienvenus : mailto:jciehl@bat710.univ-lyon1.fr)
Compilation ?
Lorsque vous tapez un fichier source C, il ne s'agit
que de texte, ce ne sont pas des instructions que le processeur peut éxécuter.
Plutot que de traduire à la main le source C en instructions pour le
processeur, il est plus pratique d'utiliser un outil : le compilateur C.
La compilation est constituée de plusieurs étapes,
qui sont regroupées sous le terme 'compilation' par abus de langage.
En résumé, la première étape,
dont le nom correct est effectivement compilation, analyse le source
C, vérifie qu'il est correct (qu'il ne comporte ni ambiguités,
ni erreurs) et génère l'ensemble d'instructions processeur correspondant.
Le résultat de cette première étape est un nouveau fichier
appelé fichier objet qui contient les instructions générées.
Cette étape ne suffit pas à construire
le programme éxécutable complet puisqu'il manque encore plusieurs
choses. En effet, vous utilisez des fonctions que vous n'avez pas écrites
: lire un caractère, écrire un caractère, les fonctions
mathématiques, etc. Ces fonctions et les instructions processeurs qui
les réalisent sont fournies avec le compilateur C. Les fonctions standards
sont regroupées dans un fichier par thème : une librairie.
Il y a donc une librairie pour les fonctions mathématiques, les entrées
/ sorties, la gestion de la mémoire, etc. Cette organisation est très
pratique, mais votre programme n'utilise, en général, que quelques
fonctions de chaque librairie. C'est le rôle de la deuxième étape,
appelée édition de liens de déterminer quelles
fonctions sont nécessaires à votre programme, d'extraire de
leurs librairies respectives les blocs d'instructions processeurs correspondants
et de relier ensemble tous les blocs d'instructions pour former votre programme
éxécutable complet.
Le paragraphe suivant présente l'utilisation de
gcc pour réaliser ces deux étapes.
GCC ?
Le compilateur C (cf. première étape, ci-dessus)
et l'éditeur de liens (cf. deuxième étape ci-dessus)
sont accessibles à travers la même commande : gcc. La
documentation ainsi que le code source complet des outils sont disponible
chez la Free Software Foundation
dans le projet GNU. Pour les curieux, le
manuel est également disponible.
Il faut donc indiquer à la commande générale
gcc si l'on souhaite compiler un fichier source ou construire le programme
éxécutable. Les paragraphes suivants détaillent les paramètres
de gcc dans les deux cas.
Compiler avec GCC
Pour indiquer à gcc que l'on souhaite compiler
un fichier source, il suffit de lui donner l'option -c et le nom de votre
fichier source. On peut également choisir le nom du fichier objet résultat
de la compilation avec l'option -o. Tapez la ligne suivante dans un terminal
/ interpréteur de commande en remplacant les noms de fichiers par
les votres :
gcc -Wall -o nom_du_fichier_objet -c nom_du_fichier_source_C
L'option -Wall demande au compilateur d'afficher tous
les messages de prévention (lorsque quelquechose est ambigue, par exemple).
Si tout ce passe bien, gcc a crée le fichier objet (en général,
c'est le nom du fichier source C avec l'extension .o). Vous pouvez
le vérifier avec la commande ls (qui affiche la liste des fichiers
du répertoire courant). Il est temps de passer à la deuxième
étape.
attention :
avant de taper cette commande, il faut placer l'interpreteur de commandes
dans le répertoire qui contient vos fichiers sources avec la commande
cd. Par exemple, si vos sources se trouvent dans le répertoire
TP1, il suffit de taper "cd TP1". Vous pouvez vérifier que
tout est correct en demandant la liste des fichiers présents dans le
répertoire courant avec la commande "ls". Si la liste de
vos fichiers sources apparaît, c'est bon, vous pouvez compiler, sinon
recommencez.
Edition de liens avec GCC (produire l'éxécutable)
Pour construire le programme éxécutable,
il faut indiquer à gcc quels morceaux doivent être utilisés.
Au minimum, le fichier objet généré par la compilation
et éventuellement une librairie (ou plusieurs, selon le cas). L'option
-o permet d'indiquer le nom du programme éxécutable à
construire et l'option -l le nom d'une librairie. De manière générale
la commande ressemblera à :
gcc -o nom_du_programme -lnom_de_la_librairie
nom_du_fichier_objet
Prenons un exemple complet : vous voulez compiler tp.c
qui se trouve dans le répertoire TP1 de votre compte.
- ouvrez un terminal / interpréteur de commandes
- placez l'interpréteur de commandes dans le répertoire
qui contient tp.c, c'est à dire TP1 : "cd TP1"
- compilez tp.c et créez tp.o, le fichier objet : "gcc -Wall
-o tp.o -c tp.c"
- construisez le programme éxécutable tp avec le fichier
objet tp.o : "gcc -o tp tp.o"
- éxécutez votre programme : "tp" ou "./tp"
Si votre programme utilise une fonction de la librairie
mathématique, par exemple, il faut le dire à l'éditeur
de liens avec l'option -l. La librairie mathématique s'appelle tout
simplement m. Il faut donc ajouter l'option -lm à l'étape
4 ci-dessus :
4bis. construisez le programme éxécutable
tp avec le fichier objet tp.o et la librairie mathématique : "gcc
-o tp -lm tp.o"
Compiler un projet composé de plusieurs fichiers sources
Il est tout à fait possible de taper toutes les
commandes nécessaires à chaque fois, mais c'est rapidement fastidieux
et source d'erreurs, il est beaucoup plus simple d'utiliser un outil de gestion
de projets : make
Suite de la lecture : gestion de projets : Make
et Makefile