Bibliotheques statique


Sommaire

Comment créer et utilisé une bibliothèque statique ?

Une bibliothèque statique c’est quoi ?

Une bibliothèque statique c’est une archive (.a) qui regroupe plusieurs objets (.o). Le code de cette archive est copié au moment de l’édition des liens.

C’est quoi l’édition des liens ?

L’édition de liens est l’étape où le linker assemble les fichiers objets (.o) et résout les références aux symboles des bibliothèques pour créer l’exécutable final.

Nous utilisons des options lors de la commande de compilation qui sont : -L<chemin_de_larchive> et -l<nom>

Imaginons que nous avons un fichier libexemple.a

cc -Wall -Wextra -Werror fichier.c -L. -lexemple

Cette commande on peux la découper en 3 partie.

  1. cc -Wall -Wextra -Werror fichier.c : Commande classique pour compiler avec les flags
  2. -L. : Permet d’ajouter le dossier courant a la liste des dossiers ou le linker ira chercher les bibliothèques, le " . " est important car c’est le chemin du dossier courant.
  3. -lexemple : Cette option ajoute la bibliothèque a la liste des libs a trouver et a utiliser (lib est sous entendu, libexemple deviens lexemple).

Le convention de nommage veux que tout .a commence par “lib”. Cela permet au linker de trouver la lib avec la commande si dessus.

Voici une solution pour que cela fonctionne sans que le fichier commence par “lib” :

# Fichier exemple.a
cc -Wall -Wextra -Werror fichier.c -L. -l:exemple.a

Cependant, la première solution reste la plus lisible.

Création d’une bibliothèque statique

Pour crée une bibliothèque statique il faut vos fonctions dans un ou plusieurs fichiers .c

Ensuite vous devez compiler le/les fichier(s) obtenir les fichiers objets.

cc -Wall -Wextra -Werror -c fichier.c

Cette commande vas me donner un fichier .o, c’est grâce a ce fichier que je vais crée mon archive. Pour crée l’archive .a il existe 2 façons de faire.

ar rc libexemple.a fichier.o
ranlib libexemple.a
ar rcs libexemple.a fichier.o

Ces deux méthodes sont équivalentes, la première reste plus portable sur des systèmes où ar ne gère pas l’option s.

Explications :

Arguments Definitions
AR Archive
RCS Options : r = Replace; c = Create; s = ecrit/actualise
RANLIB Écrit l’index des symboles dans l’archive.
Garantit la compatibilité la ou ar ne supporte pas le -s.

R = Ajoute ou remplace les fichiers .o (remplace si les fichiers existent déjà).
C = Crée l’archive si elle existe pas et supprime l’avertissement de création.
S = Écrit ou actualise la table d’index des symboles a l’intérieur de l’archive pour que le linker puisse trouver vite les symboles.

Commandes utiles avec AR :

ar t libexemple.a # t = Lister le contenue de la lib
ar x libexemple.a fichier.o # x = Extraire un membre de la lib
ar d libexemple.a fichier.o # d = Supprimer un membre de la lib

Sources :
Pierre Gradot
GeeksforGeeks
man ar

Partager :

Articles similaires

Headers

Headers

Comment crée un header sécurisé ? Sécuriser un header (.h) ne veux pas dire le rendre sur au sens sécurité informatique, mais plutôt éviter qu’il sois inclus plusieurs fois au moment de la compilation.

Lire la suite
Makefiles

Makefiles

Comment créer et utilise un makefile ? C’est quoi un makefile ? Make sert a gérer les exécutable et la compilation de programmes, make est très efficace pour les gros projets car il permet de recompiler uniquement ce qui a été modifié.

Lire la suite
Les listes chainées

Les listes chainées

Les listes a la base n’existe pas en C, elles sont le résultat d’une manipulation de pointers et de structures.

Lire la suite