S ystème d’ E xploitation
-
Upload
dolan-blanchard -
Category
Documents
-
view
25 -
download
0
description
Transcript of S ystème d’ E xploitation
![Page 1: S ystème d’ E xploitation](https://reader035.fdocuments.fr/reader035/viewer/2022072016/5681321a550346895d987a19/html5/thumbnails/1.jpg)
S. Domas
Système d’Exploitation
Make et la construction d’exécutables
1ère annéeIUT Belfort-Montbéliard
![Page 2: S ystème d’ E xploitation](https://reader035.fdocuments.fr/reader035/viewer/2022072016/5681321a550346895d987a19/html5/thumbnails/2.jpg)
2
Définitions (1)
S. Domas
• La compilation permet de transformer un fichier texte écrit dans un langage donné et de le transformer en fichier objet (.o ou .obj).
• Un fichier objet est structuré en plusieurs sections contenant entre autre du code executable (en assembleur), les données statiques et constantes.
• La commande objdump permet de lire le contenu d’un fichier objet. Par exemple :
objdump -d fich_obj : donne le code assembleur. objdump -t fich_obj : donne la liste des symboles.
• objdump est très souvent utilisé pour retrouver un symbole, par exemple un nom de fonction.
![Page 3: S ystème d’ E xploitation](https://reader035.fdocuments.fr/reader035/viewer/2022072016/5681321a550346895d987a19/html5/thumbnails/3.jpg)
3
Définitions (2)
S. Domas
• Une bibliothèque est un concaténation simple de fichiers objet. Une bibliothèque n’est donc ni un exécutable, ni un fichier « include » (.h)
• Une bibliothèque contient le code de fonctions. Un exécutable qui fait appel à ces fonctions doit utiliser la bibliothèque lors de l’édition de liens.
• Une bibliothèque peut être statique (.a) ou dynamique (.so).
• Dans le premier cas, le code de la bibliothèque est inclus dans l’exécutable.
• Dans le second cas, le code est chargé lors du lancement de l’exécutable.
![Page 4: S ystème d’ E xploitation](https://reader035.fdocuments.fr/reader035/viewer/2022072016/5681321a550346895d987a19/html5/thumbnails/4.jpg)
4
Définitions (3)
S. Domas
• L’édition de liens permet de combiner plusieurs fichiers objet en un fichier exécutable.
gcc main.o menu.o mabibli.a –lm –o prog
• Le contenu d’un fichier exécutable pour Linux peut être listé avec readelf.
• En fonction des options choisie, l’utilitaire gcc permet d’appeler soit le compilateur, soit l’éditeur de lien (« linker »).
• Au sens strict, gcc n’est donc pas un compilateur mais désigne un ensemble de programmes contenant un compilateur et un éditeur de liens.
![Page 5: S ystème d’ E xploitation](https://reader035.fdocuments.fr/reader035/viewer/2022072016/5681321a550346895d987a19/html5/thumbnails/5.jpg)
5
Définitions (4)
S. Domas
• Make est un programme qui permet de lancer des commandes shell en fonctions de dépendances d'existence et de date entre des fichiers.
• Typiquement, make est utilisé pour compiler des sources dans un ordre précis et uniquement si les sources ont été modifiées depuis la dernière production de l'exécutable.
• Pour vérifier les dépendances de date, make utilise la date de dernière mise à jour des fichiers.
![Page 6: S ystème d’ E xploitation](https://reader035.fdocuments.fr/reader035/viewer/2022072016/5681321a550346895d987a19/html5/thumbnails/6.jpg)
6
Structure (1)
S. Domas
• Le fichier d'instruction contient un ou plusieurs blocs de la forme :
cible : dependances<tab>commande 1<tab>commande 2…<tab>commande n• Cela correspond à : si la cible est plus vieille que
les fichiers donnés en dépendance, alors lancer chaque ligne commande x dans un shell différent.
![Page 7: S ystème d’ E xploitation](https://reader035.fdocuments.fr/reader035/viewer/2022072016/5681321a550346895d987a19/html5/thumbnails/7.jpg)
7
Structure (2)
S. Domas
• Le caractère tabulation est obligatoire devant la commande.
• La cible est généralement un fichier et la ou les commandes permettent de construire ce fichier.
• Par exemple, les dépendances peuvent être des fichiers objets (.o) et la cible un exécutable construit en faisant l’édition de lien des .o
![Page 8: S ystème d’ E xploitation](https://reader035.fdocuments.fr/reader035/viewer/2022072016/5681321a550346895d987a19/html5/thumbnails/8.jpg)
8
Invocation de make
S. Domas
• Dans tous les cas, les instructions que va recevoir make sont stockées dans un fichier texte.
• Si l'utilisateur tape (options entre []):make [-f fich_make] [nom_cible]
make cherche dans le répertoire courant un fichier Makefile ou makefile et essaie de constuire la cible nom_cible
• En l’abscence de cible indiquée, make construit la première rencontrée.
• Avec –f, make va chercher ses instructions dans le fichier fich_make.
![Page 9: S ystème d’ E xploitation](https://reader035.fdocuments.fr/reader035/viewer/2022072016/5681321a550346895d987a19/html5/thumbnails/9.jpg)
9
Exemple simple
S. Domas
• On veut compiler main.c et fct.c pour en faire un exécutable nommé main. Ces deux fichiers incluent un fichier defs.h. fct.c contient des appels à sqrt() dont le code est dans libm.a.
main : main.o fct.ogcc -o main main.o fct.o -lm
main.o : main.c defs.hgcc -c main.c
fct.o : fct.c defs.hgcc -c fct.c
![Page 10: S ystème d’ E xploitation](https://reader035.fdocuments.fr/reader035/viewer/2022072016/5681321a550346895d987a19/html5/thumbnails/10.jpg)
10
Cible et dépendances
S. Domas
• Attention ! Dans tous les cas, make cherche les fichiers cibles et dépendances à partir du répertoire où a été lancé make.
• Si une dépendance n'est pas dans le répertoire courant, il faut alors donner son chemin d'accès relatif.
• Dans l'exemple, si defs.h se trouve dans le sous répertoire include, alors il faut changer le makefile avec ces lignes :main.o : main.c include/defs.hfct.o : fct.c include/defs.h
![Page 11: S ystème d’ E xploitation](https://reader035.fdocuments.fr/reader035/viewer/2022072016/5681321a550346895d987a19/html5/thumbnails/11.jpg)
11
Variables
S. Domas
• make permet de manipuler ses propres variables.• une variable se définit avec :
nom_var = val1 val2 val3 ... (récursif) ounom_var := val1 val2 val3 ... (non récursif)
• Par exemple :lstsrc = a.clstsrc = b.clstobj := a.o b.olstobj := c.o
• Une variable s'utilise avec :$(nom_var)
} lstsrc contient a.c b.c
} lstobj contient c.o
![Page 12: S ystème d’ E xploitation](https://reader035.fdocuments.fr/reader035/viewer/2022072016/5681321a550346895d987a19/html5/thumbnails/12.jpg)
12
Variables prédéfinies
S. Domas
• $@ : le nom de la cible.• $< : le nom de la première dépendance.• $^ : le nom de toutes les dépendances (séparées par
des espaces.• $?: le nom de toutes les dépendances plus récentes
que la cible (séparées par des espaces).
![Page 13: S ystème d’ E xploitation](https://reader035.fdocuments.fr/reader035/viewer/2022072016/5681321a550346895d987a19/html5/thumbnails/13.jpg)
13
Expansion de variable
S. Domas
• Avant de passer la commande au shell, make fait sa propre expansion de variable, selon le même principe qu’en shell. Par exemple, si :
SRCDIR = srcSRC = a.c b.c
alors $(SRCDIR)/$(SRC) vaut src/a.c b.c
• L’expansion peut faire du chercher/remplacer. Par exemple, si :
OBJDIR = objLSTOBJ = $(SRC:%.c=$(OBJDIR)/%.o)
alors LSTOBJ contient obj/a.o obj/b.o
![Page 14: S ystème d’ E xploitation](https://reader035.fdocuments.fr/reader035/viewer/2022072016/5681321a550346895d987a19/html5/thumbnails/14.jpg)
14
Exemple simple (2)
S. Domas
• On peut réécrire l'exemple précédent en utilisant les variables :
OBJ := main.oOBJ = fct.o (equivalent à OBJ := $(OBJ) fct.o )INCL := defs.hLIBS = -lmmain : $(OBJ)
gcc -o $@ $^ $(LIBS)main.o : main.c $(INCL)
gcc -c $<fct.o : fct.c $(INCL)
gcc -c $<
![Page 15: S ystème d’ E xploitation](https://reader035.fdocuments.fr/reader035/viewer/2022072016/5681321a550346895d987a19/html5/thumbnails/15.jpg)
15
Règles implicites
S. Domas
• make connaît un certain nombre de règles pour compiler des sources. Il sait par exemple comment transformer un fichier .c en .o. Pour cela, il utilise la commande :
$(CC) -c $(CFLAGS) $<• Ces règles sont appelées implicites par opposition
aux règles explicites que l'on a utilisé dans l'exemple.
• Pour utiliser une règle implicite sur un fichier, il suffit de ne pas faire de règle explicite, (= ne pas indiquer comment construire le fichier à partir des dépendances).
![Page 16: S ystème d’ E xploitation](https://reader035.fdocuments.fr/reader035/viewer/2022072016/5681321a550346895d987a19/html5/thumbnails/16.jpg)
16
Exemple simple (3)
S. Domas
• On peut réécrire l'exemple précédent en utilisant les règles implicites :
OBJ := main.o fct.oLIBS = -lm
main : $(OBJ)gcc -o $@ $^ $(LIBS)
• Attention ! Le fait de ne pas mettre le .h en dépendance implique que make ne recompilera pas les sources si defs.h a changé.
![Page 17: S ystème d’ E xploitation](https://reader035.fdocuments.fr/reader035/viewer/2022072016/5681321a550346895d987a19/html5/thumbnails/17.jpg)
17
Création de règle implicite
S. Domas
• Il est parfois utile de définir une nouvelle règle implicite.
• Par exemple, le répertoire courant étant projet, on veut produire des fichiers objets à partir de sources se trouvant dans le sous-répertoire src.
SRCDIR = src# definition d’une nouvelle règle :%.o : $(SRCDIR)/%.c
gcc –c $<
• Quand make doit produire un .o, il utilise cette nouvelle règle et va automatiquement chercher le .c correspondant dans src.
![Page 18: S ystème d’ E xploitation](https://reader035.fdocuments.fr/reader035/viewer/2022072016/5681321a550346895d987a19/html5/thumbnails/18.jpg)
18
Cible abstraite
S. Domas
• Une cible ne correspond parfois à aucun fichier. Elle est donc abstraite. Comme il n'existe aucune possibilité de vérifier sa date, la commande est forcément appliquée.
• Exemple :OBJ = main.o fct.oclean : $(OBJ)
rm $(OBJ)• S'il n'y a pas de fichier clean dans le répertoire, le
rm est effectué à chaque lancement de make clean.