Compilation d'une bibliothèque statique
Au lieu de créer un exécutable à partir des objets, il faut créer
l'archive lib
….a
. Le programme qui mène à bien cette
opération est l'utilitaire Unix ar
.
make
connaît cette opération. Il faut juste lui indiquer quels
objets l'archive doit contenir :
lib....a: lib....a(liste des objets)
(Analogue à la ligne de dépendance d'un exécutable.)
Nota bene : il n'y a pas d'édition de liens lors de la compilation
d'une bibliothèque. La variable LDLIBS
n'a donc pas à être définie.
Mode déterministe ou non de ar
Selon le système de votre machine, il est possible que ar
fonctionne
par défaut en mode déterministe : il re-crée la bibliothèque à chaque
invocation, même si les objets n'ont pas changé.
Si l'on veut éviter ce comportement, on peut passer une option à ar
.
make
reconnaît la variable ARFLAGS
. Sa valeur par défaut est :
ARFLAGS = rv
ARFLAGS = rvU
demande à ar
de passer en mode non déterministe.
Bibliothèque statique versus bibliothèque dynamique
À l'édition de liens d'un exécutable avec une bibliothèque statique, le code de la bibliothèque est copié dans le fichier exécutable, qui est donc auto-suffisant.
Il est aussi possible de créer et faire l'édition de liens avec une bibliothèque "dynamique", ou encore "partagée".
-
Le code de la bibliothèque n'est pas dans l'exécutable.
-
Le code de la bibliothéque est chargé au moment de l'exécution.
- Le suffixe est
.so
au lieu de.a
. - L'outil qui crée la bibliothèque dynamique n'est pas
ar
comme pour une bibliothèque statique, c'est le compilateur.
Les bibliothèques installées par votre système sont souvent dynamiques : économie de place ; la mise à jour ne nécessite pas de recompilation du code utilisateur.
Pour vos propres bibliothèques, compilez plutôt des bibliothèques statiques. Intérêt pour la reproductibilité.