Description

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

Utilisation

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.

Paramètres

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
  • -llib' : 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, ...
  • -Idir : indique que le préprocesseur peut également trouver des fichiers à include via #include dans le répertoire dir en plus des répertoires standard
  • -Ldir : 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.

Informations complémentaires