Du source à l'exécutable

La chaîne de production d'un programme C : préprocesseur, compilation, assemblage, édition de liens et chargement, les fichiers .c, .h, .i, .s et .o, les bibliothèques statiques et dynamiques, les options -E, -S, -c, -o et -l de gcc, et la différence entre compilé, interprété et machine virtuelle.

  • 30 cartes
  • 5 thèmes
  • Gratuit

Le programme, thème par thème

Le poids de chaque thème suit celui que lui donne l'examen.

  1. Notions
  2. Questions
  3. Ranger et relier
  4. Mises en situation
  5. Comprendre

Quelques cartes du deck

  • Chaîne de compilation : de quoi s'agit-il ?

    Voir la réponse

    Suite d'outils qui transforment un programme C en exécutable : préprocesseur, compilateur, assembleur, éditeur de liens.

    La commande gcc les enchaîne, mais chaque étape a son fichier intermédiaire et ses propres erreurs : savoir laquelle a échoué guide le diagnostic.

  • Quel fichier produit la commande gcc -c main.c ?

    • main.o
    • a.out
    • main.s
    • main.i
    Voir la réponse

    main.o

    -c compile et assemble sans lier : le résultat est le fichier objet main.o. a.out est le nom par défaut d'un exécutable complet ; main.s vient de -S, et le texte préprocessé de -E.

  • Les options de gcc arrêtent la chaîne à une étape : -E après le …, -S après la compilation, -c après l'….

    Voir la réponse

    Les options de gcc arrêtent la chaîne à une étape : -E après le préprocesseur, -S après la compilation, -c après l'assemblage.

    -S laisse un fichier .s en langage d'assemblage, -c un fichier .o. Sans ces options, gcc va jusqu'à l'exécutable.

  • Préprocesseur : de quoi s'agit-il ?

    Voir la réponse

    Première étape, purement textuelle : elle remplace les #include par le contenu des fichiers, développe les #define et retire les commentaires.

    Il ne comprend pas le C : gcc -E main.c montre le texte qu'il passe au compilateur, déjà plusieurs centaines de lignes pour un seul #include <stdio.h>.

  • Un programme qui appelle sqrt compile, mais l'édition de liens affiche undefined reference to 'sqrt'. Quelle correction s'impose ?

    • Ajouter #include <math.h> en tête du fichier
    • Ajouter l'option -E pour développer les macros
    • Recompiler avec -c pour régénérer le fichier objet
    • Ajouter -lm à la fin de la commande gcc
    Voir la réponse

    Ajouter -lm à la fin de la commande gcc

    Si math.h manquait, c'est le compilateur qui le signalerait (déclaration implicite de sqrt). Ici la déclaration est connue ; c'est la définition, dans la bibliothèque mathématique, que l'éditeur de liens ne trouve pas. -lm se place après les fichiers sources : placé avant, l'éditeur de liens peut ignorer la bibliothèque et l'erreur reste.