Vous êtes sur la page 1sur 4

MOULOUDI Khaled / 201100002207

L2 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.o
objdump -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 <stdio.h>
#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$ ./test
3+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.o
EXEC = test
CC = 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:)

Vous aimerez peut-être aussi