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.
- Notions
- Questions
- Ranger et relier
- Mises en situation
- 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
gccles 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
-ccompile et assemble sans lier : le résultat est le fichier objetmain.o.a.outest le nom par défaut d'un exécutable complet ;main.svient de-S, et le texte préprocessé de-E.Les options de
gccarrêtent la chaîne à une étape :-Eaprès le …,-Saprès la compilation,-caprès l'….Voir la réponse
Les options de
gccarrêtent la chaîne à une étape :-Eaprès le préprocesseur,-Saprès la compilation,-caprès l'assemblage.-Slaisse un fichier.sen langage d'assemblage,-cun fichier.o. Sans ces options,gccva jusqu'à l'exécutable.Préprocesseur : de quoi s'agit-il ?
Voir la réponse
Première étape, purement textuelle : elle remplace les
#includepar le contenu des fichiers, développe les#defineet retire les commentaires.Il ne comprend pas le C :
gcc -E main.cmontre le texte qu'il passe au compilateur, déjà plusieurs centaines de lignes pour un seul#include <stdio.h>.Un programme qui appelle
sqrtcompile, mais l'édition de liens afficheundefined reference to 'sqrt'. Quelle correction s'impose ?- Ajouter
#include <math.h>en tête du fichier - Ajouter l'option
-Epour développer les macros - Recompiler avec
-cpour régénérer le fichier objet - Ajouter
-lmà la fin de la commandegcc
Voir la réponse
Ajouter
-lmà la fin de la commandegccSi
math.hmanquait, c'est le compilateur qui le signalerait (déclaration implicite desqrt). 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.-lmse place après les fichiers sources : placé avant, l'éditeur de liens peut ignorer la bibliothèque et l'erreur reste.- Ajouter