gcc
est le compilateur C/C++ développé dans le cadre du projet GNU. Il fonctionne sur de nombreuses plateformes, dont Unix/Linux.
Pour des programmes plus complexes que HelloWorld, il est fortement recommandé d'utiliser make pour contrôler les compilations de gcc
Le tutoriel d'installation de GCC est disponibla à l'adresse https://wiki.student.info.ucl.ac.be/Logiciels/GCC
gcc
comprend en fait un préprocesseur, un compilateur proprement dit, un assembleur et un éditeur de liens. Pour comprendre le rôle de ces différentes parties de gcc
, considérons le programme C minimal suivant :
#include <stdio.h> int main(int argc, char **argv) { printf("Hello, world\n"); return 0; }
Pour transformer ce programme C en un exécutable, les phases suivantes sont nécessaires :
gcc -E hello.c > hello.i
: le préprocesseur traite les différentes directives #include, #define, #ifdef, ... et produit un fichier c
sans dépendance extérieures.
gcc -S hello.i
: le compilateur compile le code C est un code en langage d'assemblage. Dans le cas d'un processeur intel i386, cela donne le code suivant :
.file "hello.c" .section .rodata .LC0: .string "Hello, world\n" .text .globl main .type main,@function main: pushl %ebp movl ebp subl $8, %esp andl $-16, %esp movl $0, %eax subl esp subl $12, %esp pushl $.LC0 call printf addl $16, %esp movl $0, %eax leave ret .Lfe1: .size main,.Lfe1-main .ident "GCC: (GNU) 3.2.3 (Debian)"
gcc -c hello.s
: l'assembleur convertit le programme assembleur en un code objet. (fichier .o)
gcc -o hello hello.o -lc
: l'éditeur de liens linke le code objet avec la librairie standard afin de produire un exécutable complet.
gcc
supporte un très grand nombre de paramètres, il est impossible de les expliciter tous dans ce wiki. Les plus importants sont :
-ansi
: force l'utilisation de C standard, sans utiliser d'extensions
-Wall
: active tous les warnings. Il est recommandé d'utiliser ce paramètre par défaut, il permet d'éviter de nombreuses erreurs bêtes.
-v
: indique la version actuelle de gcc
-l
lib' : indique à l'éditeur de liens de charger la libraire lib''. -lc
est la librairie C par défaut, -lm
correspond à la libraire contenant les fonctions mathématiques, ...
-I
dir : indique que le préprocesseur peut également trouver des fichiers à include via #include dans le répertoire dir en plus des répertoires standard
-L
dir : indique que l'éditeur de liens peut également trouver des librairies à linker dans le répertoire dir en plus des répertoires standard
-static
: force l'éditeur de liens à linker de façon statique les librairies (c'est-à-dire en incluant le code des fonctions utilisées dans l'exécutable) plutôt que de linker de façon dynamique
-g
inclus dans l'exécutable de l'information complémentaire pour le debugger gdb. Nécessaire si vous comptez utiliser gdb pour tester votre programme, mais augmente la taille de l'exécutable.
man gcc