Bases de Linux : Bibliothèques Statiques vs Bibliothèques Dynamiques

Erika Caoili

Suivre

17 déc. 2019 * 4 min de lecture

Photo par Edwin Andrade sur Unsplash

Qu’est-ce qu’une bibliothèque sous Linux ?

Pourquoi utilisons-nous des bibliothèques ?

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

Comment et pourquoi les utilisons-nous ?

Une bibliothèque sous Linux

Une bibliothèque est une collection de morceaux de code pré-compilés appelés fonctions. La bibliothèque contient des fonctions communes et ensemble, elles forment un paquet appelé – une bibliothèque. Les fonctions sont des blocs de code qui sont réutilisés dans tout le programme. L’utilisation à nouveau des morceaux de code dans un programme permet de gagner du temps. Cela empêche le programmeur de réécrire le code plusieurs fois. Pour les programmeurs, les bibliothèques fournissent des fonctions réutilisables, des structures de données, des classes, etc.

 » Par exemple, si vous créez une application qui doit effectuer des opérations mathématiques, vous n’avez pas besoin de créer une nouvelle fonction mathématique pour cela, vous pouvez simplement utiliser des fonctions existantes dans les bibliothèques pour ce langage de programmation. »(« Comprendre Les Bibliothèques Partagées Sous Linux »)

Une bibliothèque n’est pas exécutable et c’est une différence clé par rapport aux processus et aux applications. Les bibliothèques jouent leur rôle au moment de l’exécution ou de la compilation. Dans le langage de programmation C, nous avons deux types de bibliothèques: les bibliothèques dynamiques et les bibliothèques statiques.Les bibliothèques

ont des fichiers objets créés par le "-c" gcc flag et se terminent par ".o" par convention. Ils sont le résultat de la sortie du compilateur et contiennent des définitions de fonctions sous forme binaire.

Différences Entre les bibliothèques Dynamiques et Statiques

Les bibliothèques dynamiques ont une convention de nommage « *.so » et les bibliothèques statiques ont un « *.un ».

Les bibliothèques dynamiques ou partagées se présentent sous la forme de fichiers séparés en dehors des fichiers exécutables. Ainsi, il n’a besoin que d’une seule copie des fichiers de la bibliothèque au moment de l’exécution. Au moment de la compilation, les bibliothèques statiques restent verrouillées dans un programme. Il contient les programmes du fichier contenant une copie des fichiers de la bibliothèque au moment de la compilation.

Lors de l’utilisation d’une bibliothèque dynamique, le programmeur fait référence à cette bibliothèque lorsqu’il en a besoin au moment de l’exécution. Par exemple, pour accéder à la fonction de longueur de chaîne à partir du standard input/output header file, vous pouvez y accéder dynamiquement. Il trouvera la référence de la bibliothèque du programme à l’exécution en raison du chargeur dynamique. Il charge ensuite cette fonction de longueur de chaîne en mémoire. Ainsi, l’accessibilité dynamique de la bibliothèque doit être facilement disponible ou elle devient impuissante.

Avantages et inconvénients des bibliothèques dynamiques

  1. Il n’a besoin que d’une copie au moment de l’exécution. Cela dépend du fait que l’application et la bibliothèque sont étroitement disponibles l’une pour l’autre.
  2. Plusieurs applications en cours d’exécution utilisent la même bibliothèque sans que chaque fichier ait besoin d’avoir sa propre copie.
  3. Cependant, que se passe-t-il si la bibliothèque dynamique devient corrompue? Le fichier exécutable peut ne pas fonctionner car il vit en dehors de l’exécutable et est vulnérable à la rupture.
  4. Ils contiennent des fichiers plus petits.
  5. Les bibliothèques dynamiques sont liées au moment de l’exécution. Il ne nécessite pas de recompilation et de relocalisation lorsque le programmeur effectue un changement.

Au moment de la compilation, les applications utilisent des bibliothèques statiques. Toutes les copies des fonctions sont placées dans le fichier d’application car elles sont nécessaires pour exécuter le processus.

Avantages et inconvénients des bibliothèques statiques

  1. Les bibliothèques statiques résistent à la vulnérabilité car elles se trouvent dans le fichier exécutable.
  2. La vitesse d’exécution est plus rapide car son code objet (binaire) se trouve dans le fichier exécutable. Ainsi, les appels aux fonctions sont exécutés plus rapidement. N’oubliez pas que la bibliothèque dynamique vit en dehors de l’exécutable, les appels seraient donc effectués depuis l’extérieur de l’exécutable.
  3. Les modifications apportées aux fichiers et au programme nécessitent une nouvelle liaison et une recompilation.
  4. La taille du fichier est beaucoup plus grande.

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

Pour les deux bibliothèques, votre programme doit inclure un prototype pour chacune des fonctions qui existent dans votre bibliothèque. Si vous utilisez un fichier d’en-tête, n’oubliez pas d’inclure le header filename.

#include "<header file name>"

Bibliothèques dynamiques

Pour créer une bibliothèque dynamique, écrivez la commande suivante:

gcc -g -fPIC -Wall -Werror -Wextra -pedantic *.c -shared -o liball.so

Avec le "*.c" — il prend tous les fichiers source C du répertoire courant et crée une bibliothèque partagée appelée "liball.so." L’indicateur -fPIC permet de référencer le code suivant à n’importe quelle adresse virtuelle lors de l’exécution. Il signifie Code Indépendant de la Position.La bibliothèque ne contient pas de données à des adresses fixes car son emplacement en mémoire changera d’un programme à l’autre. Les fichiers objets sont compilés en utilisant le -shared flag. Le compiler identifiera plus tard une bibliothèque en recherchant des fichiers commençant par "lib" et se terminant par la convention de nommage, .so

Le programme a besoin du chemin pour rechercher les fichiers de la bibliothèque. Vous devez donc taper la commande suivante pour ajouter cet emplacement à la variable d’environnement appelée LD_LIBRARY_PATH.

export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH

Lorsque vous utilisez la bibliothèque dynamique, tapez la commande suivante:

gcc -g -wall -o app app.c liball.so

Bibliothèques statiques

Pour créer une bibliothèque statique, nous devons utiliser la commande suivante:

ar rc liball.a dog.o cat.o bird.o

Le "ar" signifie archive et il est utilisé pour créer la bibliothèque statique. Tous les fichiers se terminant par ".o" seront ajoutés au liball.a library et ce sont les fichiers objets dans ce cas.

Le -rc flag fera deux choses: remplacer et créer une nouvelle bibliothèque si elle n’existe pas déjà. L’étape suivante est l’indexation, pour ce faire, nous tapons:

ranlib liball.a

Lorsque vous utilisez la bibliothèque statique, tapez la commande suivante:

gcc main.c -L -l<filename>

Le -L flag accède au linker afin que les bibliothèques puissent être trouvées dans le répertoire donné. En outre, il recherche également d’autres emplacements où le compilateur recherche des bibliothèques système.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.