Académique Documents
Professionnel Documents
Culture Documents
Série TP n°2
(Compilation & Edition de liens)
Notion :
Le langage C est donc un langage compilé (même s’il existe des interpréteurs plus ou moins expérimentaux). Ainsi, un
programme C est décrit par un fichier texte, appelé fichier source. La compilation se décompose en fait en 4 phases
successives : 1- Traitement par les préprocesseur (passage au pré-processeur), 2- la compilation en langage assembleur,
3- transformation de l’assembleur en code machine, et 4- l’édition de liens.
Il existe évidemment un grand nombre de compilateurs C pour chaque plateforme (Windows, Linux, MAC etc...). Le
compilateur utilisé dans le TP correspond au compilateur libre gcc (cc), disponible sur quasiment toutes les plateformes
UNIX.
1- gcc -E NOM_MODULE.c > NOM_MODULE.i
2- gcc –S NOM_MODULE.i
3- gcc –C NOM_MODULE.S
4- gcc NOM_MODULE.O
La command gcc NOM_MODULE.c : compiler et faire l’édition de liens et la création de module exécutable
d’une façon automatique et supprime les fichiers intermédiaires.
Le command gcc – c NOM_MODULE.c => faire la compilation et la création de fichier objet.
Le command gcc NOM_MODULE.o => faire l’édition de liens et la création de fichier exécutable.
Exercice 01 :
1. utilisez l’éditeur de textes pour créer un fichier texte #include <stdio.h>
1
7. que se passe-t-il si vous tapez : gcc-o hello.c.
affichage des fichiers objet. Objdump (objdump - afficher des informations à partir des fichiers
objet.)
L’instruction objdump –x nom_du_module_objet (Tous les en-tête Afficher toutes les informations
disponibles en-tête, y compris la table des symboles et des entrées de réinstallation.
L’instruction objdump –s nom_du_module_objet (Afficher le contenu intégral de toutes les sections
demandées.)
L’instruction objdump –S nom_du_module_objet ou objdump –d nom_du_module_objet.
(code source d'affichage mélangé avec le démontage).
8. compilez le programme en utilisant la commande make nom_du_module ? quelle est votre
remarque.
Exercice 02
Voici un programme suivant (f1.c , f2.c)
1. Compilez les deux programme d’une façon séparer ? quelle votre remarque ?
2. Corrigez les erreurs ? et créez le fichier exécutable de f1.c ? quelle est votre remarque ?
3. Supprimez les fichiers résolut dans la question 2. Récompilez les deux modules f1.c et f2.c ? et
faire l’édition de liens de deux modules et produit le fichier exécutable (f)
gcc –o f f1.o f2.o
Exécutez le programme exécutable f. ? quelle est votre remarque ?
4. Créez un fichier prototype.h , qui contient les prototypes des fonction décrites dans f2.c, et
intégrez le fichier prototype.h dans le module f1.c
#ifndef FONC_H #include <stdio.h>
#define FONC_H #include "prototype.h"
float carre (float) ; int main (){
#endif int i= 0 ;
i = carre (4) ;
printf("i = %d\n", i);
return 0;
5. Quelle est votre remarque ?
}
Exercice 3
Modules : mod1.c, mod2.c lib.h
#include <stdio.h> #include <stdio.h> #ifdef lib_h
int main (void){ extern int nbr; int nbr =10 ; #define lib_h
int k; int i ; int k;
printf("%d\n", nbr); int k =0;
for (i=0; i<nbr;i++) k= k+1; #endif
printf("%d\n", k);
return 0;}
1. compilez le programme avec les commandes : gcc –c mod1.c, gcc –c mod2.c , gcc –o pgm mod1.o mod2.o
2. Corrigé les erreurs de programme.
3. Que faire le programme.