Article de reference

Bibliothèque partagée

Une bibliothèque partagée est une bibliothèque de code exécutable chargée en mémoire de manière à ce que plusieurs exécutables ( programmes et autres bibliothèques) puissent l'u...

bibliothèque de code exécutable chargée en mémoire de manière à ce que plusieurs exécutables ( programmes et autres bibliothèques) puissent l'utiliser lors de l'exécution .

À l'inverse, une bibliothèque statique est copiée dans un exécutable. Une bibliothèque statique peut être réutilisée (une forme de partage) dans plusieurs exécutables, mais chaque exécutable contient une copie du code de la bibliothèque au lieu de partager une copie en mémoire avec d'autres exécutables. Bien que ce ne soit plus le cas aujourd'hui, historiquement, toutes les bibliothèques étaient statiques. Bien qu'une bibliothèque partagée puisse avoir une liaison statique, une telle bibliothèque n'est pas classée comme bibliothèque statique.

Souvent, une bibliothèque partagée est également une bibliothèque dynamique chargée par un éditeur de liens dynamique , ce qui simplifie généralement son utilisation pour le programmeur par rapport à une liaison statique. Une bibliothèque dynamique n'a pas nécessairement besoin d'être accessible à plusieurs exécutables (contrairement à une bibliothèque partagée) et n'a pas besoin d'être chargée lors de l'exécution par le client (contrairement à une bibliothèque dynamique).

processus et sur disque. Si la mémoire virtuelle est utilisée, les processus exécutent la même page physique de RAM, mappée dans leurs espaces d'adressage respectifs. Ceci présente des avantages. Par exemple, sur le système OpenStep , les applications ne pesaient souvent que quelques centaines de kilo-octets et se chargeaient rapidement ; la majeure partie de leur code se trouvait dans des bibliothèques déjà chargées par le système d'exploitation à d'autres fins.du code indépendant de la position , comme sous Unix , ce qui conduit à une architecture complexe mais flexible, soit en utilisant des adresses virtuelles communes, comme sous Windows et OS/2 . Ces systèmes garantissent une forte probabilité de partage du code par divers moyens, tels que le pré-mappage de l'espace d'adressage et la réservation d'emplacements pour chaque bibliothèque partagée. Une troisième alternative consiste en un stockage à un seul niveau avec un espace d'adressage unique , comme celui utilisé par l' IBM System/38 et ses successeurs. Ceci permet l'utilisation de code dépendant de la position, les programmes et les bibliothèques se voyant attribuer une adresse permanente dans cet espace d'adressage.

Dans certains cas, différentes versions de bibliothèques partagées peuvent poser problème, notamment lorsque des bibliothèques de versions différentes portent le même nom de fichier et que plusieurs applications sont installées sur un système, chacune nécessitant une version spécifique. Ce scénario est connu sous le nom de « DLL hell » , en référence aux fichiers DLL de Windows et d'OS/2 . La plupart des systèmes d'exploitation modernes, postérieurs à 2001, disposent de mécanismes de nettoyage pour éliminer ces situations ou utilisent des bibliothèques « privées » spécifiques à l'application.

Exemples

Les technologies de bibliothèque couramment utilisées suivantes sont à la fois partagées et dynamiques.

DLL
Windows utilise le format Portable Executable (PE) pour sa technologie de bibliothèque de liens dynamiques (DLL).
DONC
Solaris et d'autres systèmes basés sur System V Release 4 , Linux et les systèmes BSD actuels utilisent le format exécutable et lié (ELF) pour la technologie des objets partagés (SO), parfois et plus précisément appelée objet partagé dynamique (DSO).
DYLIB
Les systèmes d'exploitation basés sur Darwin , tels que macOS et iOS , utilisent le format Mach-O pour les fichiers .dylib .