Académique Documents
Professionnel Documents
Culture Documents
Le présent document a été rédigé par les étudiants de 2ème année Ingé-
nieur de l’IAI, promotion 2016-2017, sous la supervision de Monsieur Pierre
MOUKELI MBINDZOUKOU, Enseignant.
1/17
Institut Africain d’Informatique (IAI) – Année académique 2016-2017 – Exposé de Système d’Exploitation – 2ème Ingénieur
2/17
Institut Africain d’Informatique (IAI) – Année académique 2016-2017 – Exposé de Système d’Exploitation – 2ème Ingénieur
Par définition, une bibliothèque est un ensemble de fonctions utilitaires, mises à
disposition sous forme de code binaire, pour être utilisées, en tant que code
exécutable, sans avoir à les réécrire et les recompiler. En d’autres termes, c’est une
collection de routines, qui peuvent être éditées ou prêtes à être utilisées par des
programmes.
Les bibliothèques sont utilisées principalement pour mettre en œuvre des interfaces
de programmation, des frameworks et des plugins ; elles peuvent être incorporées
comme composantes des langages et environnements de programmation.
Utilisées comme framework, une bibliothèque est une collection de classes (lots de
routines) qui, utilisées ensemble, forment le squelette d'un programme. Ils facilitent le
développement rapide d’applications (programmes).
Enfin, en tant que plugins, les bibliothèques sont des éléments de code exécutable
qu'une application recherche en vue d'étendre ses fonctionnalités. Cette technique est
utilisée par exemple par les navigateurs web pour prendre en charge l'affichage
d'animations ou de vidéos.
3/17
Institut Africain d’Informatique (IAI) – Année académique 2016-2017 – Exposé de Système d’Exploitation – 2ème Ingénieur
fonctionnalités sont apportées par des bibliothèques standards qui accompagnent le
langage de programmation. Par exemple la bibliothèque standard de C contient une
collection normalisée de routines permettant de manipuler des fichiers, d'écrire des
textes, d'utiliser la mémoire, ou de faire des calculs (c’est la bibliothèque stdio).
Une bibliothèque statique (généralement d’extension .a) est une bibliothèque qui sera
intégrée à l’exécutable (programme principal) lors de l’édition de lien. L’avantage de
cette stratégie est que l’exécutable, une fois édité, est autonome et ne nécessite rien
de plus pour être exécuté. La bibliothèque est en fait un fichier objet complémentaire.
Par convention, une bibliothèque statique est nommée : libname.a, où name est le
nom effectif de la bibliothèque. Exemple : libMath.a. La création d’une bibliothèque
statique se fait en plusieurs étapes.
4/17
Institut Africain d’Informatique (IAI) – Année académique 2016-2017 – Exposé de Système d’Exploitation – 2ème Ingénieur
1.3.1.1. Création d’un fichier objet pour une bibliothèque statique
Exemples :
gcc –c toto.c –o toto.o
gcc –c tata.c –o tata.o
gcc –c titi.c –o titi.o
La commande à utiliser pour créer une bibliothèque à partir de fichiers objets existants
est ar (archiver en anglais) dont la syntaxe est :
ar –rcv libnom.a [liste des fichiers objet]
Exemple : Si toto, titi et tata sont des fichiers objet générés suivant les indi-
cations données en 3.1.1, alors pour les intégrer à la bibliothèque
statique personnage, on utilisera la commande ci-après :
ar –rcv libpersonnage.a toto.o titi.o tata.o
Options (arguments) de ar :
L’option r : permet de remplacer les fichiers de l’archive par les nou-
veaux ;
L’option c : permet de créer l’archive si elle n’existe pas encore ;
L’option v : mode verbeux. Décrit (affiche) l’activité de la commande.
Dans une bibliothèque statique, l’index est la liste des objets qui peuvent en être réfé-
rencés, exportés. C’est-à-dire les noms de variables et de fonctions (routines) existant
dans la bibliothèque, qui peuvent être utilisés par d’autres programmes.
5/17
Institut Africain d’Informatique (IAI) – Année académique 2016-2017 – Exposé de Système d’Exploitation – 2ème Ingénieur
La génération ou la mise à jour de l’index n’est pas obligatoire. Elle se fait grâce à la
commande :
ranlib [nom de la bibliothèque].
Exemple :
Ranlib libpersonnage.a
Les bibliothèques dynamiques, .so (Sharing Object) sous Linux ou .dll (Dynamic Link
Library) sous Windows, sont des bibliothèques qui ne sont pas intégrées au code exé-
cutable lors de l’édition des liens. C’est au moment de l’exécution, que le programme
principal ou exécutable appellera alors la bibliothèque pour exécuter les fonctions
qu’elle contient. Il y a plusieurs avantages à cette stratégie par rapport aux biblio-
thèques statiques :
la bibliothèque n’est chargée qu’une fois en mémoire même si elle est utilisée
(partagée) par plusieurs programmes ;
L’exécutable (programme principal) est plus léger ;
On peut mettre à jour la bibliothèque dynamique sans recompiler les pro-
grammes qui l’utilisent (à condition de ne pas modifier les fichiers d’entête ou
header .h).
La commande est la même que pour la création des fichiers objet d’une bibliothèque
statique, sauf qu’ici, il faut obligatoirement utiliser l’option –fPIC (Position Indepen-
dent Code) pour générer le code exécutable sans indiquer d’adresse mémoire ; car en
6/17
Institut Africain d’Informatique (IAI) – Année académique 2016-2017 – Exposé de Système d’Exploitation – 2ème Ingénieur
fonction du programme qui utilisera cette bibliothèque, les adresses peuvent être dif-
férentes.
Exemples :
gcc –fPIC –Wall –Wextra –c toto.c –o toto.o
gcc –fPIC –Wall –Wextra –c tata.c –o tata.o
gcc –fPIC –Wall –Wextra –c titi.c –o titi.o
Arguments de la commande :
L’option fPIC : Position Independent Code, pour générer le code exécu-
table sans indiquer d’adresse mémoire ;
L’option Wall : permet de gérer les erreurs ;
L’option Wextra : permet une meilleure gestion des variables externes.
Pour plus d’amples informations taper dans le terminal : man gcc.
Exemple :
gcc –o libpersonnage.so –shared toto.o titi.o tata.o
Argument de la commande :
L’option shared : indique qu’il s’agit d’un code partagé ou code réen-
trant.
Lorsque l’on crée ou lance un programme exécutable, les librairies sont recherchées
dans des répertoires par défaut (/lib, /usr/lib, contrairement à Windows où la re-
cherche se fait dans le répertoire courant), et si elles n’y sont pas trouvées, la recherche
se poursuit dans la liste des répertoires spécifiés dans la variable d’environnement
LD_LIBRARY_PATH. En cas d’échec, la commande signale une erreur. Par conséquent,
à défaut de loger la bibliothèque dans les répertoires par défaut, il faut exporter (ajou-
ter) son chemin d’accès dans la variable d’environnement LD_LIBRARY_PATH à l’aide
de la commande export :
export LD_LIBRAIRY_PATH = $LD_LIBRAIRY_PATH : Chemin_Biblio
Exemple :
export LD_LIBRARY_PATH = $LD_LIBRARY_PATH : ~/chemin_Biblio/
7/17
Institut Africain d’Informatique (IAI) – Année académique 2016-2017 – Exposé de Système d’Exploitation – 2ème Ingénieur
N.B : Pour ne pas avoir à refaire cette manipulation à chaque démarrage du
système, il est préférable d’éditer le fichier ~/.profile (modifications n’affectant
que l’utilisateur courant) ou bien /etc/profile (modifications affectant tous les
utilisateurs de la machine, nécessitant donc d’être root pour les faire) et de
rajouter la ligne :
export LD_LIBRAIRY_PATH = $LD_LIBRAIRY_PATH : chemin_Biblio
2. ETUDE DE CAS
Le projet qui nous a été posé dans le cadre de l’application du cours de Système
d’Exploitation est la mise en œuvre d’une bibliothèque, à savoir, un programme objet
(.o), susceptible d’être incorporer à d’autres programmes. Nous avons pris comme cas
d’illustration, le tri d’un fichier (.txt). L’analyse et la solution de ce problème sont
exposées dans le reste de cette partie.
Pour la mise en œuvre de notre application, nous avons fait recours principalement à
quatre fonctions, à la suite de l’enchainement desquelles nous obtenons effectivement
trié :
8/17
Institut Africain d’Informatique (IAI) – Année académique 2016-2017 – Exposé de Système d’Exploitation – 2ème Ingénieur
- Une fonction pour lire les données à trier. Elle prendra pour paramètres le nom
et le chemin du fichier ;
- Une fonction pour faire le tri, laquelle prend en paramètres deux tableaux de
chaînes de caractères ;
- Une fonction dénommée qsort, qui est référencé par la précédente assurer le
tri effectif ;
- Une fonction qui prend en paramètres le nom, la taille et le chemin du fichier
permettant ainsi d’enregistrer le fichier trié.
Pour mener à bien notre projet, nous avons pensé à deux pistes de solutions :
- Accéder directement au fichier afin de le trier et d’afficher le résultat, avec
un inconvénient de lenteur de traitement ;
- Récupérer le contenu du fichier dans un tableau, effectuer le tri et restaurer
le résultat dans un autre fichier.
Nous avons opté pour la seconde option, que nous estimons la mieux adaptée à notre
cas d’un fichier volumineux.
A cet effet, nous aurons besoin de trois (3) procédures principales : une pour charger le
contenu d’un fichier dans un tableau, une autre pour trier le tableau et une dernière pour
stocker le tableau trié dans un nouveau fichier. Ces procédures peuvent utiliser d’autres
fonctions et procédures et fonctions pour effectuer leurs traitements respectifs.
9/17
Institut Africain d’Informatique (IAI) – Année académique 2016-2017 – Exposé de Système d’Exploitation – 2ème Ingénieur
2.3.1. Contenu du fichier d’entêtes de fonctions (fonction_lib.h).
10/17
Institut Africain d’Informatique (IAI) – Année académique 2016-2017 – Exposé de Système d’Exploitation – 2ème Ingénieur
int nbl : nombre de lignes ;
int nbc : nombre de colonnes.
11/17
Institut Africain d’Informatique (IAI) – Année académique 2016-2017 – Exposé de Système d’Exploitation – 2ème Ingénieur
2.3.2. Fichier .c contant le code source des fonctions déclarées dans le fichier .h.
12/17
Institut Africain d’Informatique (IAI) – Année académique 2016-2017 – Exposé de Système d’Exploitation – 2ème Ingénieur
c) Code de la procédure loadFichier
13/17
Institut Africain d’Informatique (IAI) – Année académique 2016-2017 – Exposé de Système d’Exploitation – 2ème Ingénieur
h) Code de la procédure triFichier
Avec ces paramètres, qsort va appliquer un algorithme classique de tri qui comparera
les éléments à l’aide de la fonction dont l’adresse est passée en paramètre ; ensuite elle
permutera au besoin en échangeant le contenu des deux blocs mémoire.
N.B : Si vous voulez qu’une routine ne soit pas accessible hors de votre bibliothèque, il
faudra la déclarer static.
14/17
Institut Africain d’Informatique (IAI) – Année académique 2016-2017 – Exposé de Système d’Exploitation – 2ème Ingénieur
2.4. Exemple de Génération d’une bibliothèque
***** modifier cette partie pour montrer comment l’exemple précédent pour être com-
pilé et géré comme une bibliothèque****
Une bibliothèque statique (généralement d’extension .a) est une bibliothèque qui sera
intégrée à l’exécutable lors de l’édition de lien. L’avantage de cette stratégie est que
l’exécutable est autonome et ne nécessite rien de plus pour fonctionner. La biblio-
thèque se comporte comme un fichier objet complémentaire. Par convention, une bi-
bliothèque statique est nommée: libname.a, où name est le nom effectif de la biblio-
thèque. Exemple : libMath.a. La création d’une bibliothèque statique se fait en plu-
sieurs étapes.
Exemples :
gcc –c toto.c –o toto.o
gcc –c tata.c –o tata.o
gcc –c titi.c –o titi.o
Arguments de gcc :
L’option -c : indique à gcc de ne pas activer l’éditeur de liens en vue de
générer programme exécutable. On obtiendra alors un fichier objet (.o).
En fait, après le compilateur c, la commande gcc activera l’assembleur
pour produire le programme objet, puis elle s’arrêtera ;
L’option -o [fichier] : spécifie le fichier à produire au terme de l’exécution
de la commande gcc, qui peut être soit un fichier exécutable, soit un fi-
chier objet. Le fichier produit par défaut est a.out.
La commande à utiliser pour créer une bibliothèque à partir de fichiers objets existants
est ar (archiver en anglais) dont la syntaxe est :
ar –rcv libnom.a [liste des fichiers objet]
Exemple :
15/17
Institut Africain d’Informatique (IAI) – Année académique 2016-2017 – Exposé de Système d’Exploitation – 2ème Ingénieur
ar –rcv libpersonnage.a toto.o titi.o tata.o
Arguments :
L’option r : permet de remplacer les fichiers de l’archive par les nou-
veaux ;
L’option c : permet de créer l’archive si elle n’existe pas encore ;
L’option v : mode verbeux. Décrit (affiche) l’activité de la commande.
La génération ou la mise à jour de l’index n’est pas obligatoire. Elle se fait grâce à la
commande :
ranlib [nom de la bibliothèque].
Exemple :
Ranlib libpersonnage.a
Les bibliothèques dynamiques - .so (Sharing Object) sous Linux ou .dll (Dynamic Link
Library) sous Windows – sont des bibliothèques qui ne sont pas intégrées à l’exécutable
lors de l’édition des liens. Au moment de l’exécution, le programme principal ou exé-
cutable appellera alors la bibliothèque pour exécuter les fonctions qu’elle contient. Il y
a plusieurs avantages à cette stratégie par rapport aux bibliothèques statiques :
la bibliothèque n’est chargée qu’une fois en mémoire même si elle est utilisée
(partagée) par plusieurs programmes ;
L’exécutable (programme principal) est plus léger ;
16/17
Institut Africain d’Informatique (IAI) – Année académique 2016-2017 – Exposé de Système d’Exploitation – 2ème Ingénieur
On peut mettre à jour la bibliothèque dynamique sans recompiler les pro-
grammes qui l’utilisent (à condition de ne pas modifier les fichiers d’entête ou
header .h).
La commande est la même que pour la création des fichiers objet d’une bibliothèque
statique, sauf qu’ici, il faut obligatoirement utiliser l’option –fPIC (Position Indepen-
dent Code) pour générer le code exécutable sans indiquer d’adresse mémoire ; car en
fonction du programme qui utilisera cette bibliothèque, les adresses peuvent être dif-
férentes. La commande pour créer une bibliothèque dynamique est :
gcc -c [nom fichier source] -fPIC -Wall –Wextra –o [nom fichier objet.o]
Exemples :
gcc –fPIC –Wall –Wextra –c toto.c –o toto.o
gcc –fPIC –Wall –Wextra –c tata.c –o tata.o
gcc –fPIC –Wall –Wextra –c titi.c –o titi.o
Arguments de la commande :
L’option fPIC : Position Independent Code) pour générer le code exécu-
table sans indiquer d’adresse mémoire ;
L’option Wall : permet gérer les erreurs
L’option Wextra : permet une meilleure gestion des variables externes.
Pour plus d’amples informations taper dans le terminal : man gcc.
Exemple :
gcc –o libpersonnage.so –shared toto.o titi.o tata.o
Argument de la commande :
L’option shared : indique qu’il s’agit d’un code partagé ou code réen-
trant.
Lorsque l’on crée ou lance un programme exécutable, les librairies sont recherchées
dans des répertoires par défaut (/lib, /usr/lib, contrairement à Windows où la re-
cherche se fait dans le répertoire courant), et si elles n’y sont pas trouvées, la recherche
17/17
Institut Africain d’Informatique (IAI) – Année académique 2016-2017 – Exposé de Système d’Exploitation – 2ème Ingénieur
se poursuit dans la liste des répertoires spécifiés dans la variable d’environnement
LD_LIBRARY_PATH. En cas d’échec, la commande signale une erreur. Par conséquent,
à défaut de loger la bibliothèque dans les répertoires par défaut, il faut exporter (ajou-
ter) son chemin d’accès dans la variable d’environnement LD_LIBRARY_PATH à l’aide
de la commande export :
export LD_LIBRAIRY_PATH = $LD_LIBRAIRY_PATH : Chemin_Biblio
Exemple :
export LD_LIBRARY_PATH = $LD_LIBRARY_PATH : ~/chemin_Biblio/
3. CONCLUSION
Les bibliothèques représentent ce qu’est le tracteur au cultivateur puisqu’elles permettent
aux développeurs de produire rapidement et efficacement des applications. Pour notre part,
ce travail nous a permis de nous familiariser avec les mécanismes de création, de gestion et
d’utilisation des bibliothèques. C’était aussi l’occasion de mieux découvrir l’environnement
Linux et la programmation en langage C.
18/17
Institut Africain d’Informatique (IAI) – Année académique 2016-2017 – Exposé de Système d’Exploitation – 2ème Ingénieur