logo xgarreau.org Quoi ma tête ?
xavier@xgarreau.org
Les Librairies en C
Version imprimable

Introduction.

Intérêt ?

Imaginez : Vous avez développé une série de fonctions très utiles pour un projet, prenons l'exemple d'un tri par bulles. Un jour, vous devez effectuer une nouvelle série de tris. Vous ouvrez le projet et passez la journée à faire du copier coller ?!?! NON !!! car vous aviez pensé à créer un librairie contenant la fonction principale du tri, n'est ce pas ?
Les librairies permettent de se constituer des bibliothèques de fonctions réutilisables et distribuables.

Vous voulez un autre avantage des librairies ?
On les compile à part ! Si vous avez comme moi un pc qui se fait vieux, vous savez que la compilation peut prendre pas mal de temps. La bonne nouvelle c'est qu'une fois les librairies compilées, vous ne les recompilez pas à chaque fois que vous recompilez votre projet. Tout au plus, vous les liez, s'il s'agit de bibliothèques statiques.

Qu'est ce qu'il y a dedans ?

Une librairie est composée d'un fichier d'en têtes (headers en anglais, d'ou le .h), ce sont les fichiers .h qui doivent vous dire quelque chose, non ? Et d'un partie binaire.
Le fichier d'en têtes, permet de "déclarer" les fonctions présentes dans la librairie, le type de valeurs qu'elles renvoient et les paramètres à leur passer.
La partie binaire est constituée d'un ou plusieurs fichiers c compilés. Ces fichiers c contiennent l'implémentation des prototypes de fonctions déclarées dans le fichier d'en têtes.
Vous pouvez modifier le code de la librarie autant que vous le désirez, du moment que vous respectez les prototypes définis dans le fichier .h.

Statique, Dynamique ?

Ouais, entrons dans le vif du sujet. Qu'est ce qu'une librairie statique ? et une librairie dynamique ? Quelles sont les avantages et inconvénients de chacune ?
  • Quand vous utilisez une librairie statique (généralement .a sous linux, .lib sous ouinouin) la librairie est liée à l'exécutable généré. C'est à dire que vous obtenez un fichier exécutable relativement "lourd".
    D'autre part, si vous apportez des modifications à la librairie, vous devez recompiler la librairie ET l'exécutable.
    Bon coté : lorsque vous distribuez votre application, l'exécutable contient tout ce qui lui est nécessaire pour fonctionner, ce qui évite les problèmes de dépendances.
  • L'utilisation des librairies dynamiques apporte plusieurs avantages :
    1. La librairie est liée au programme qui l'utilise lors de l'exécution, l'exécutable distribué est ainsi plus léger que dans le cas d'une librairie statique.
    2. La librarie n'est chargée qu'une fois en mémoire, même si elle est utilisée par plusieurs exécutables.
    3. Lors de modifications apportées à la librarie, l'application l'utilisant n'a pas besoin d'être recompilée, à la condition toutefois que ces changements respectent les prototypes définis dans le fichier d'en têtes.

    Mais il y a aussi des inconvénients :
    1. Pour exécuter une application faisant appel à une librarie dynamique, vous devez posséder ces librairies et elles doivent pouvoir être trouver par le système. Nous verrons plus loin quelques façons de vérifier tout celà.
    2. Le temps de lancement peut être plus long, étant donné que la liaison se fait lors de l'exécution.

    Nota Bene : les liens avec les librairies dynamiques ne se font pas toujours lors de l'exécution, un programme peut en effet charger lui même les librairies dont il a besoin quand il en a besoin (voir les fonctions dlopen() et dlsym()), Celà est utile pour construire l'application au fur et à mesure de son exécution. Imaginez par exemple que vous écriviez un programme de retouche d'image, pourquoi charger les libraries de traitement de fichier jpeg si pendant une "session" l'utilisateur ne se sert que de fichiers .png ?

Plus d'infos sur cette page ?

Consultez les pages man de dlopen et dlsym et celles qui y sont conseillées et tapant dans la console
	man dlopen
	man dlsym

Précédent Index Suivant

Auteur : Xavier GARREAU
Modifié le 13.03.2000

Votre avis dans le forum.

Zazou Projets

Développement

Utilisation et culture

Ailleurs

Vieilleries

Bonne parole

Partenaire



Ce site existe depuis le 01/02/2003
Pour rapporter un bug : xavier@xgarreau.org.
Hébergement : Maneya.
Essayez ZazouMiniWebServer !
Votre avis dans le forum.