Rapport

download Rapport

If you can't read please download the document

description

rap

Transcript of Rapport

MOULOUDI Khaled / 201100002207L2 ISIL Section A Groupe 2

Compte-rendu du TP No.4 de Systme d'Exploitation Programmation C sous Linux

Rapport du TP4 de Systme d'Exploitation:

Exercice 1:

1 On commence par le dossier TP3 l'aide de mkdir.

2 On cre le document demand l'aide de gedit ou de cat directement partir de la console.

3 Pour gnerer le fichier objet test.o du fichier source, il suffit d'xecuter:

gcc test.c -c

4 Pour effectuer une dition de lien dynamique de ce programme, il suffit d'xecuter:

gcc -o test.dyn test.o

Sachant que l'dition des liens est une tape primordiale de la cration d'un excutable qui permet de lier les fichiers objets avec leur bibliothque.L'edition de liens statique permet de faire une copie intgrale des bibliothques utilises et de les inclure dans le fichier excutable de tel sorte ce que ce dernier puisse tre execut sur toutes les machines, mme si celles-ci n'ont pas les bibliothques ncessaires installes (Elles sont disponibles dans l'excutable). Ceci est couteux en espace.

En revanche, l'dition de liens dynamique ne copie pas les bibliothques au sein de l'excutable ce qui fait que les machines o cet excutable sera excut devrait avoir les bibliothques installes.

Inclure l'argument -o permet de forcer le nom du rsultat en test.dyn au lieu de a.out

5 Pour afficher les bibliothques partages demandes par l'excutable:

ldd test.dyn

Ce qui donne:

linux-gate.so.1 => (0xb77a4000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb75e6000) /lib/ld-linux.so.2 (0xb77a5000)

6 Pour raliser une dition de lien statique, on excute:

gcc -o -static test.stat test.o

7 Un ls indique clairement que les deux fichiers sont diffrents de taille :

Le fichier test.dyn prend 7386 octets alors que le fichier test.stat prend 754971 octets

La diffrence de taille, comme explique prcdemment est d au fait que le fichier cre avec une dition de liens statique intgre toutes les bibliothques ncessaires l'excution du programme. De ce fait, il peut tre excut n'importe o mais est lourd compar au fichier cre avec une dition de lien dynamique.

8 On excute les commandes: objdump -d test.oobjdump -d test.dyn

objdump sert afficher le code objet dassembl. On remarque que le code de test.dyn est beaucoup plus long que celui de test.o

9 Revenons vers le fichier cre et modifions ce qu'il faut pour le rendre modulaire l'aide de la commande cat.

Le contenu des fichiers deviendra:

add.c:#include "add.h" int add(int x, int y) { return x+y; }

add.h:int add (int x, int y);

test.c:#include #include "add.h"

int main() { int a = 3, b=4,c; c=add(a,b); printf("%d + %d = %d\n",a,b,c); return 0; }

10 Au moment de l'tape de l'dition, nous aurons besoin de ces trois fichiers modulaires car c'est l o le lien est fait entre les diffrents fichiers, modules et bibliothques. Les fichiers ncessaires la cration de l'excutable test est le fichier objet de add.c que l'on cre grce la commande

gcc -c test.c add.c

11 Pour crer l'excutable de test il suffit d'xecuter la commande suivante:

gcc -o test test.o add.o

Et on l'excute grce ./test pour obtenir le rsultat:

mk@MK:~/TP3$ ./test3 + 4 = 7

12 La commande make effectue la compilation d'executables d'une manire automatique. Elle se charge de recompiler tous les fichiers qui ont t modifis. Pour cela, cette commande a besoin d'un fichier makefile contenant les dpendances du programme en question.Dans notre cas, le makefile peut se prsenter de la manire suivante:

OBJS = test.O add.oEXEC = testCC = gcc

test: $ (OBJS)$ (CC) $(OBJS) -o $(EXEC)

add.o: add.c add.h$ (CC) -c add.c

test.o:$ (CC) -c test.cm

13 Aprs avoir cre le fichier sub.c dont le contenu est donn plus du fichier sub.h qui devra contenir:

int sub (int x, int y)

14 On cre la bibliothque comme demand (Bibliothque statique libarithm.a). Cela fera crer une archive du mme nom et fera office de bibliothque de fonctions arithmtiques.

15 On refait l'dition de lien en utilisation la bibliothque statique libarithm;a en excutant ce qui suit:

gcc -o testlibstat test.o libarithm.a

On remarque qu'en excutant le fichier testlibstat on obtient exactement le mme rsultat que dans la technique prcdente, savoir

3+4 = 7

16 On cre le dossier ncessaire grce mkdir.ON y place la bibliothque en excutant

mv libarithm.a TP3/lib

17 On continue en crant la bibliothque demand en utilisaiton la commande dcrite adns le TP.On remarque l'attribut -shared qui indique seulement que nous voulons produire un objet partag qui peut tre li avec d'autres objets pour former un excutable.

18 On refait l'dition de lien comme pour tout l'heure.

gcc o testlibdyn test.o libarithm.so

19 Vient maintenant l'excution de testlibdyn qui est tout simplement impossible.

./testlibdyn: error while loading shared libraries: libarithm.so: cannot open shared object file: No such file or directory

Pour remedier ce problme, Il faut d'abord copier la bibliothque ncessaire l'excution dans le repertoire concern puis l'on excute la commande suivante qui va simplement crer le lien avec la bibliothque dynamique.

ldconfig n TP3/lib

Une fois l'excutable recompil, il s'execute sans problme:)