Vous êtes sur la page 1sur 2

CENTRE UNIVERSITAIRE DE BORDJ BOU ARRERIDJ Licence 2 : informatique.

INSTITUT DES SCIENCES ET TECHNOLOGIES Semestre : 2


DÉPARTEMENT MATH ET INFORMATIQUE Matière : Système d’exploitation 1.

Série TP n°2
(Compilation & Edition de liens)

Remarque : créez un répertoire réservé à vos exercices de programmation.

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>

de nom Hello.c, et saisissez le programme C.  int main (void)


{
2. Utilisez les commandes de la notion pour compiler /* afficher le mot bonjour et sauter
Le programme Hello.c, utilise la commande cat pour une ligne */
printf("bonjour !!!\n");
Afficher le contenu de fichier résolut.
return 0;
3. supprimer tous les fichiers résolut dans la partie 2 }

Compilez le module source en appelant le compilateur C par : gcc –c hello.c


Quel est le nom du module objet obtenu sa taille ?
Faites l’édition des liens du module objet (les bibliothèques utiles pour cet exemple sont ajoutées
automatiquement) : gcc nom_du_module_objet
Quel est le nom du programme exécutable et sa taille ?.
4. faites exécuter le module exécutable ? ./nom_du_module_exécutable
5. après avoir effacé le module objet et le module exécutable, tapez la commande suivante qui permet
d’effectuer à la fois la compilation et l’édition de liens ? quel est le nom du module exécutable ? quelle est
votre remarque ?
6. il est possible de choisir le nom du module exécutable.
gcc –o hello hello.c ou gcc nom_du_module.c –o nom_du_module_exécutable.

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)

int main (){ float carre (float var) {


int i= 0 ;
i = carre (4) ; return (var * var) ;
printf("i = %d\n", i); }
return 0;
}

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.

Vous aimerez peut-être aussi