« Bibliothèque logicielle » : différence entre les versions

Un article de Wikipédia, l'encyclopédie libre.
Contenu supprimé Contenu ajouté
Silex6 (discuter | contributions)
Silex6 (discuter | contributions)
→‎Cas spécifiques dans différents systèmes d'exploitation : -> pratique et différences entre plateformes
Ligne 54 : Ligne 54 :
Lors de la création d'une fonction bouchon, l'éditeur de liens ajoute ensuite une entrée dans la ''table de symboles'' du programme pour informer que l'adresse de la fonction référencée doit être recalculée avant l'exécution du programme<ref name="santanu" />.
Lors de la création d'une fonction bouchon, l'éditeur de liens ajoute ensuite une entrée dans la ''table de symboles'' du programme pour informer que l'adresse de la fonction référencée doit être recalculée avant l'exécution du programme<ref name="santanu" />.


== En pratique ==
== Cas spécifiques dans différents systèmes d'exploitation ==
=== Windows ===
{{article détaillé|Dynamic Link Library}}
''DLL'' signifie ''Dynamic Link Library'', ou en français Bibliothèque de liens dynamiques, dans le cadre du [[Système d'exploitation]] [[Microsoft Windows|Windows]], et compatibles ([[Wine]], [[ReactOS]], [[Darwine]]). Traditionnellement, le nom de ces fichiers se termine par l'extension « .dll ». Une DLL peut contenir du code ou des ressources qui sont alors rendus disponibles à d'autres applications.


Lorsqu'un ou plusieurs programmes utilisent une bibliothèque dynamique, une seule copie du code et des ressources de cette bibliothèque est chargée en mémoire. La même fonction peut potentiellement être exécutée simultanément par plusieurs programmes et les variables globales peuvent potentiellement être modifiées simultanément<ref>{{en}}Arndt Bode,''Euro-Par 2000 Parallel Processing: 6th International Euro-Par Conference, Munich, Germany, August 29-September 1, 2000'',Springer - 2000,{{ISBN|9783540679561}}</ref>.
=== Unix, GNU/Linux et BSD ===


Les noms des fichiers de bibliothèque partagées se terminent par ''.so'' sur [[Unix]], ''.dylib'' sur [[Mac OS X]] et ''.dll'' sur [[Windows]]<ref name="reddy" />, et les emplacements conventionnels des bibliothèques diffèrent en fonction de la plateforme.
Sous les systèmes de type [[Unix]], les bibliothèques seront conventionnellement nommées à l'aide de l'extension <code>.so</code> (''shared object''), <code>.dylib</code> (dynamic library de MacOSX), <code>.a</code> (archive, Unix traditionnels), <code>.sl</code> ("shared library") ou encore <code>.sa</code> ("shared archive", SunOS).


sur les systèmes d'exploitation [[Unix]] les bibliothèques sont en principe enregistrées dans les répertoires ''/lib'' ou ''/usr/lib''. Une variable d'environnement ''LD_LIBRARY_PATH'' permet d'indiquer d'autres répertoires à prendre en compte par l'éditeur de liens. Le nom de chaque bibliothèque comporte les lettres ''lib'' et se termine par ''.a'' (bibliothèque statique) ou ''.so'' (bibliothèque partagée)<ref name="neil" />. Les bibliothèques statiques utilisent le format des ''fichiers d'archive''<ref name="levine" />. Ce format, théoriquement destiné à stocker une [[Archive (informatique)|collection de fichiers quelconques]], est utilisé exclusivement pour les fichiers de bibliothèque<ref name="levine" />.
Les fichiers ''.so'' sont recherchés dans les répertoires décrits par /etc/ld.so.conf (documentation disponible avec <tt>man ldconfig</tt>).


Sur les systèmes d'exploitation [[Windows]], les bibliothèques statiques ont format semblable au format d'[[Archive (informatique)|archive]] des systèmes [[Unix]], mais avec un index de construction différente<ref name="levine" />. Les noms des bibliothèques statiques se terminent par ''.lib'' tandis que les noms des bibliothèques dynamiques se terminent par ''.dll''. Une bibliothèque statique peut également être une collection de ''bouchons'' relatifs à une bibliothèques dynamique. Les noms des bibliothèques dynamiques peuvent également se terminer par ''.ocx'', ''.drv'' ou ''.cpl''<ref name="reddy" />. Les emplacements standard des bibliothèques sont les répertoires ''\Windows'', ou ''\Windows\System'', ainsi que le répertoire ou se trouve l'application qui utilise la bibliothèque. Une variable d'environnement permet d'indiquer au système d'exploitation d'autres répertoires éventuels<ref>{{en}}Brian Hook,''Write portable code: an introduction to developing software for multiple platforms'',No Starch Press - 2005,{{ISBN|9781593270568}}</ref>.
Les bibliothèques peuvent évoluer et différentes versions peuvent être utilisées sur le même système, par exemple :
/usr/lib/libxml2.so (lien)
/usr/lib/libxml2.so.2 (lien)
/usr/lib/libxml2.so.2.6.6
/usr/lib/libxml.so.1 (lien)
/usr/lib/libxml.so.1.8.17


Sur les systèmes d'exploitation [[Mac OS X]] les bibliothèques sont distribuées sous forme de ''framework'': un répertoire dans lequel se trouve la/les bibliothèques ainsi que la documentation et les ''headers'' (description des fonctions dans un langage de programmation). La plupart des bibliothèques logicielles de Mac OS X ([[Cocoa (Apple)|Cocoa]], [[Carbon (Mac OS X)|Carbon]],...) sont distribuées sous cette forme<ref name="reddy" />. Les bibliothèques sous forme de framework sont enregistrées dans le répertoire ''/System/Library/Frameworks'', et les pilotes sont enregistrés dans le répertoire ''/System/Library/Extensions''<ref>{{en}}Amit Singh,''Mac OS X Internals: A Systems Approach'',Addison-Wesley Professional - 2006,{{ISBN|9780132702263}}</ref>.
=== Exemples ===

C:\WINNT\system32\wsock32.dll
/usr/lib/libxml2.so


== Bibliothèques de langages de scripts ==
== Bibliothèques de langages de scripts ==

Version du 1 mai 2013 à 09:26

En informatique une bibliothèque logicielle est une collection de fonctions compilée et prête à être utilisée par des programmes[1],[2]. Les bibliothèques sont enregistrées dans des fichiers semblables, voire identique au fichiers de programmes[3], sous la forme d'une collection de fichiers de code objet rassemblés[2] accompagnée d'un index permettant de retrouver facilement chaque fonction[3].

Les bibliothèques sont apparues dans les années 1950, et sont devenues un sujet incontournable de programmation. Elles sont utilisées pour réaliser des interfaces de programmation, des framework ou des plugins. Les fonctions contenues dans les bibliothèques sont typiquement en rapport avec des opérations fréquentes en programmation: manipulation des interfaces utilisateur, la manipulation des bases de données ou les calculs mathématiques[2].

Utilisation

En informatique une fonction est un ensemble d'instructions qui prends en charge une certaine opération et produit un résultat[4]. Les bibliothèques sont apparues dans les années 1950, sous la forme d'un magasin contenant des rouleaux de bande magnétique sur lesquels étaient enregistrés des routines - fonctions[3]. Les programmeurs pouvaient choisir les bandes magnétiques à utiliser dans leurs programmes[3].

Les bibliothèques sont utilisées pour mettre en œuvre des interfaces de programmation (abr. API pour Application Programming Interface)[5] ainsi que des frameworks et des plugins et peuvent être incorporés dans les langages de programmation.

  • Une interface de programmation est un ensemble documenté et standardisé de fonctions par lesquels un logiciel offre des services à d'autres logiciels. La documentation spécifie comment le logiciel consommateur peut interagir avec le logiciel fournisseur en utilisant des fonctions qui sont mises en œuvre dans une bibliothèque logicielle[5].

Les fonctions d'une interface de programmation sont mises à disposition des programmeurs compilées et emballées sous la forme d'une bibliothèque logicielle[5]. Les interfaces de programmation sont un sujet incontournable de la programmation contemporaine et un logiciel se sert typiquement de nombreuses interfaces de programmation[5].

Les frameworks se distinguent des interfaces de programmation par le fait que les interfaces de programmation comportent des fonctions qu'un programme va utiliser, tandis que les framework sont des bibliothèques qui se serviront des fonctions du programme[6].

Les plugins sont des bibliothèques logicielles qu'une application recherche en vue d'étendre ses fonctionnalités. Cette technique est utilisée par exemple par les navigateurs web pour prendre en charge l'affichage d'animations ou de vidéos[5].

Le langage de programmation C s'utilise avec une bibliothèque standard qui contient une collection normalisée de fonctions permettant par exemple de manipuler des fichiers, d'écrire des textes, d'utiliser la mémoire, ou de faire des calculs[5].

La technique

Les bibliothèques sont manipulées de manière différente par l'éditeur de liens et le système d'exploitation selon si elles sont statiques ou partagées. La manipulation se sert de la table de symboles créée par le compilateur.

bibliothèque statique

Une bibliothèque et dite statique si elle est destinée à être copiée dans les programmes qui l'utilisent lors de la construction de ces derniers[1]

bibliothèque partagée

Une bibliothèque est dite partagée si elle est destinée à être associées aux programmes au moment ou ils sont exécutés. Avec une telle bibliothèque, la même copie de la bibliothèque peut être utilisée par plusieurs programmes[1]

éditeur de liens

L'éditeur de liens est le programme qui combine différents fichiers de code objet, parmi lesquels des bibliothèques, pour en faire un programme exécutable[7].

table de symboles

Une table de symboles est une structure manipulée par les compilateurs et les éditeurs de liens, qui contient les noms d'éléments du programme (fonctions, variables, constantes), ainsi que leur adresses, c'est-à-dire leur emplacement dans le programme[7]. La table de symboles produite par le compilateur est utilisée ensuite par l'éditeur de liens pour déterminer l'emplacement des fonctions qui se trouvent dans les bibliothèques[7].

fonction bouchon (anglais stub)

Une fonction bouchon f'() est une fonction ajoutée automatiquement à un programme qui ne fait rien d'autre que d'utiliser une fonction f() d'une bibliothèque partagée[7].

procédé

Lors de la traduction d'un fichier de code source en code objet par un compilateur, celui-ci ajoute à la table de symboles les noms des fonctions utilisées dans ce fichier source ainsi que leur adresse[7]. L'adresse est laissée vide si la fonction n'a pas été trouvée dans le fichier de code source[7]. L'éditeur de liens recherchera alors à quoi corresponds chaque fonction dont l'adresse est laissée blanc par le compilateur[1].

S'il la fonction provient d'une bibliothèque dite statique, l'éditeur de liens copie l'intégralité de la bibliothèque dans le programme[1]. Le fichier de bibliothèque n'est alors plus nécessaire à l'exécution du programme[1]. La bibliothèque est ainsi copiée dans chaque programme qui l'utilise[1].

Si la fonction provient d'une bibliothèque partagée alors celle-ci n'est pas copiée dans le programme lors de la compilation, au lieu de cela la bibliothèque est placée en mémoire en même temps que le programme, immédiatement avant son exécution[1]. Une seule copie de la bibliothèque est enregistrée dans l'ordinateur[1]. Lorsque plusieurs programmes utilisant cette bibliothèque se trouvent en mémoire, ils utilisent tous la même copie de la bibliothèque, ce qui permet d'économiser de la place par rapport à une bibliothèque statique[1].

L'utilisation de bibliothèques partagées présente cependant certains risques. Le principal risque est qu'une bibliothèque utilisée par un programme ne peut pas être trouvée au moment ou le programme en a besoin, entraînant l'échec du programme[1]. Il arrive également parfois que l'interface de programmation de la bibliothèque qui a été trouvée ne corresponds pas à celle dont le programme a besoin, entraînant un crash de ce dernier[1].

Il est parfois nécessaire de recalculer l'adresse de chaque fonction après l'avoir ajoutée au programme[7] ou de créer des fonctions de bouchon.

Avec une bibliothèque statique, le recalcul des adresses est effectué par l'éditeur de liens immédiatement après la compilation. Tandis qu'avec une bibliothèque partagée il est effectué lors du chargement du programme en mémoire, immédiatement avant son exécution[8]. Le position independent code (abr. PIC) est un code objet produit par certains compilateurs, qui ne nécessite par de recalcul de ces adresses par l'éditeur de liens. Ce type de code est souvent utilisé pour les bibliothèques[7].

Lors de la création d'une fonction bouchon, l'éditeur de liens ajoute ensuite une entrée dans la table de symboles du programme pour informer que l'adresse de la fonction référencée doit être recalculée avant l'exécution du programme[7].

En pratique

Lorsqu'un ou plusieurs programmes utilisent une bibliothèque dynamique, une seule copie du code et des ressources de cette bibliothèque est chargée en mémoire. La même fonction peut potentiellement être exécutée simultanément par plusieurs programmes et les variables globales peuvent potentiellement être modifiées simultanément[9].

Les noms des fichiers de bibliothèque partagées se terminent par .so sur Unix, .dylib sur Mac OS X et .dll sur Windows[5], et les emplacements conventionnels des bibliothèques diffèrent en fonction de la plateforme.

sur les systèmes d'exploitation Unix les bibliothèques sont en principe enregistrées dans les répertoires /lib ou /usr/lib. Une variable d'environnement LD_LIBRARY_PATH permet d'indiquer d'autres répertoires à prendre en compte par l'éditeur de liens. Le nom de chaque bibliothèque comporte les lettres lib et se termine par .a (bibliothèque statique) ou .so (bibliothèque partagée)[2]. Les bibliothèques statiques utilisent le format des fichiers d'archive[3]. Ce format, théoriquement destiné à stocker une collection de fichiers quelconques, est utilisé exclusivement pour les fichiers de bibliothèque[3].

Sur les systèmes d'exploitation Windows, les bibliothèques statiques ont format semblable au format d'archive des systèmes Unix, mais avec un index de construction différente[3]. Les noms des bibliothèques statiques se terminent par .lib tandis que les noms des bibliothèques dynamiques se terminent par .dll. Une bibliothèque statique peut également être une collection de bouchons relatifs à une bibliothèques dynamique. Les noms des bibliothèques dynamiques peuvent également se terminer par .ocx, .drv ou .cpl[5]. Les emplacements standard des bibliothèques sont les répertoires \Windows, ou \Windows\System, ainsi que le répertoire ou se trouve l'application qui utilise la bibliothèque. Une variable d'environnement permet d'indiquer au système d'exploitation d'autres répertoires éventuels[10].

Sur les systèmes d'exploitation Mac OS X les bibliothèques sont distribuées sous forme de framework: un répertoire dans lequel se trouve la/les bibliothèques ainsi que la documentation et les headers (description des fonctions dans un langage de programmation). La plupart des bibliothèques logicielles de Mac OS X (Cocoa, Carbon,...) sont distribuées sous cette forme[5]. Les bibliothèques sous forme de framework sont enregistrées dans le répertoire /System/Library/Frameworks, et les pilotes sont enregistrés dans le répertoire /System/Library/Extensions[11].

Bibliothèques de langages de scripts

Les langages de scripts comme python ou perl ont leurs propres bibliothèques, qui sont souvent écrites dans le langage dit "de script".

Par exemple la bibliothèque python2.4-pychart se compose notamment des trois fichiers suivants :

  • /usr/lib/python2.4/site-packages/pychart/log_coord.py
  • /usr/lib/python2.4/site-packages/pychart/axis_doc.py
  • /usr/lib/python2.4/site-packages/pychart/object_set.py

Notes et références

  1. a b c d e f g h i j k et l (en)Brian Ward, How Linux Works: What Every SuperUser Should Know, No Starch Press - 2004, (ISBN 9781593270353)
  2. a b c et d (en)Neil Matthew et Richard Stones, Beginning Linux Programming, John Wiley & Sons - 2011, (ISBN 9781118058619)
  3. a b c d e f et g (en)John Levine, Linkers and loaders - Operating Systems Series, Morgan Kaufmann - 2000, (ISBN 9781558604964)
  4. (en)John Shapley Gray, Interprocess Communications in Linux, Prentice Hall Professional - 2003, (ISBN 9780130460424)
  5. a b c d e f g h et i (en)Martin Reddy, API Design for C++, Elsevier - 2011, (ISBN 9780123850041)
  6. (en) Richard Harrison et Mark Shackman, Symbian OS C++ for Mobile Phones, Volume 3, John Wiley & Sons - 2007, (ISBN 9780470066584)
  7. a b c d e f g h et i (en)Santanu Chattopadhyay,System Software, PHI Learning Pvt. Ltd. - 2007, (ISBN 9788120330511)
  8. (en)Shibu,Intro To Embedded Systems 1E,Tata McGraw-Hill Education, (ISBN 9780070145894)
  9. (en)Arndt Bode,Euro-Par 2000 Parallel Processing: 6th International Euro-Par Conference, Munich, Germany, August 29-September 1, 2000,Springer - 2000, (ISBN 9783540679561)
  10. (en)Brian Hook,Write portable code: an introduction to developing software for multiple platforms,No Starch Press - 2005, (ISBN 9781593270568)
  11. (en)Amit Singh,Mac OS X Internals: A Systems Approach,Addison-Wesley Professional - 2006, (ISBN 9780132702263)

Voir aussi

Article connexe

Liens externes

DLL sous Windows
Bibliothèques en C et C++