Bibliothèque logicielle
| Image manquante Symbole-ordinateur.png | Cet article est une ébauche concernant l'informatique, vous pouvez partager vos connaissances en le modifiant. |
En informatique, on nomme bibliothèque logicielle un ensemble de routines regroupées pour réaliser un groupe de tâches du même domaine. Les bibliothèques logicielles se distinguent des exécutables dans la mesure où elles sont utilisées par des programmes plutôt que d'être exécutées directement elles-même; elles fournissent un code « assistant » un programme indépendant en lui fournissant des services (par exemple le calcul d'un cosinus, ou l'inversion d'une matrice).
Les bibliothèques sont parfois appelées librairies ; il s'agit d'un abus de langage résultant d'une mauvaise traduction du faux ami en anglais library.
| Sommaire |
Pourquoi ce nom ?
Le nom de bibliothèque est dérivé du comportement humain : quand on ignore comment faire quelque chose de technique (par exemple, planter des grains dans un jardin) et que l'on veut pourtant le faire, on peut aller se documenter en bibliothèque, et consulter des livres indiquant comment procéder.
Les programmes procèdent un peu de la même façon : plutôt que de coder une procédure courante dans chaque programme en ayant besoin (ce qui veut dire qu'une même procédure serait réécrite autant de fois sur un ordinateur qu'il y a de programmes susceptibles de l'utiliser), on rassemble ces procédures dans des bibliothèques. Si un programme a une fonction à remplir et que celle-ci se trouve en bibliothèque, il l'utilisera directement.
Conception et organisation des bibliothèques
L'organisation classique des bibliothèques passe par un découpage thématique des fonctions, permettant au programmeur de retrouver plus facilement la fonction dont il a besoin. Ce découpage thématique permet de classer les bibliothèques selon les services qu'elles rendent :
- Bibliothèques de bas niveau : elles fournissent des services d'interface avec le système d'exploitation, avec les périphériques, ou fournissent des outils génériques :
- bibliothèques d'entrées/sorties : fonctions de lecture et d'écriture de fichiers, de périphériques d'entrée/sortie comme le clavier, l'écran, etc.
- gestion de structures de données,
- Bibliothèques de haut niveau (aussi appelées bibliothèques métier) : les fonctions qu'elles contiennent sont propres à une activité spécifique :
- boîtes à outils graphiques : ensemble de fonctions permettant de gérer, d'animer et d'afficher des objets graphiques complexes (par exemple : OpenGL),
- bibliothèques d'opérateurs de traitement d'image : ensemble de fonctions destinées à structurer l'information dans une image à des fins d'analyse,
- Autres bibliothèques :
- combinateurs en programmation fonctionnelle,
- protocoles de métaprogrammation.
L'Application Programming Interface ou API est la partie externe d'une bibliothèque ou d'un ensemble de bibliothèques, permettant au programmeur de choisir parmi les fonctions disponibles celle qui va lui rendre le service dont il a besoin. Les API se présentent comme une liste des noms des fonctions disponibles, avec une documentation sur les paramètres à leur fournir et sur les résultats qu'elles fournissent.
Mise en œuvre des bibliothèques
Principes
Pour que le code exécutable puisse accéder aux instructions d'une fonction d'une bilbliothèque qu'il utilise, il faut que chaque appel de fonction dans le code soit associé à l'adresse effective de la première instruction de la fonction appelée dans la bibliothèque.
Pour cela, il existe plusieurs méthodes et outils, qui interviennent après l'étape de compilation :
- l'édition de liens assure la mise en place, dans le code exécutable de l'application, des instructions de branchement vers les fonctions externes (issues d'une ou de plusieurs bibliothèques) ;
- un chargeur permet, lors de l'exécution du programme, d'amener en mémoire les parties de code des bibliothèques utilisées, de sorte que lorsqu'une fonction est appelée, son code soit disponible en mémoire.
Le chargement des bibliothèques peut survenir de deux manières :
- une bibliothèque chargée dynamiquement voit son code exécutable chargé à la volée lors d'un appel par le programme qui en exploite une fonction. Ce chargement peut même, dans certains cas, être réduit aux seules parties de code correspondant aux fonctions appelées.
- une bibliothèque chargée statiquement voit tout son code chargé en même temps que le code de l'application utilisatrice.
Une bibliothèque est en principe partagée par le système d'exploitation afin de ne pas dupliquer son code dans toutes les applications y faisant appel. Voir cependant la possibilité de versions simultanées.
Bibliothèques chargées dynamiquement
Une bibliothèque dynamique, appelée Dynamic Link Library (.dll) sous Windows et généralement appelée shared object (.so) sous UNIX, est un fichier de bibliothèque logicielle utilisé par un programme exécutable, mais n'en faisant pas partie.
Ce fichier contient des fonctions qui pourront être appelées pendant l'exécution d'un programme, sans que celles-ci soient incluses dans son exécutable.
Le principal avantage des bibliothèques dynamiques est la réduction de la taille d'un exécutable, puisque certaines parties du logiciel se situent dans le système. De plus, cela permet d'introduire des validations identiques pour chaque programme, puisque tous les programmes font lien vers une seule et même bibliothèque, ce qui évite au programmeur de réinventer la roue à chaque fois.
Ceci permet de partager des fonctionnalités (Unicode, IHM, chiffrage par exemple) entre différentes applications sans gaspiller ni espace disque ni espace mémoire.
Bibliothèques partagées
Lorsque plusieurs programmes utilisent les mêmes bibliothèques, il est judicieux de ne charger celles-ci qu'une seule fois en mémoire et de laisser tous les programmes en utiliser la même copie. On parle alors de bibliothèques partagées. Une bibliothèque peut être dynamique sans pour autant être partagée.
Versions simultanées
Lors du remplacement d'une version de bibliothèque par une autre, il arrive que certains programmes fonctionnant avec l'ancienne version ne puissent plus fonctionner avec la nouvelle. Comme ce problème était récurrent depuis les années 1960, les systèmes d'exploitation modernes comme Linux permettent la coexistence sans contradiction de plusieurs versions de bibliothèque, au prix d'un léger surencombrement du disque et de la mémoire centrale.
Cas spécifiques dans différents systèmes d'exploitation
Windows
Une DLL, dans Windows est une bibliothèque de fonctions pouvant être appelée depuis un autre programme, par un simple lien dynamique.
DLL signifie Dynamic Link Library, ou en français Bibliothèque de liens dynamiques pour Windows. Traditionnellement, le nom de ces fichiers se termine par l'extension « .dll ». Elle peut être au format pe-coff (à vérifier).
Ce terme est employé dans le cadre du Système d'exploitation Windows.
Les compilateurs comme Visual Basic et les classes MFC utilisent des .DLL qui doivent être distribuées avec l'application créée avec ces outils.
Les DLL sont recherchées dans le répertoire courant, puis dans les path comme c:\windows et c:\windows\system.
Linux
Sous Linux, les bibliothèques seront conventionnellement nommées par l'extension .so (shared objet). Elles peuvent être au format ELF.
Les fichiers .so sont recherchés dans les répertoires décrits par /etc/ld.so.conf (documentation disponible avec man ldconfig).
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
Exemples
c:/WINNT/system32/wsock32.dll /usr/lib/libxml2.so
Les bibliothèques les plus connues sont sans doute les bibliothèques standard C et C++. Bibliothèque C ANSI
/usr/lib/libstdc++.so.5.0.5
Bibliothèques graphiques (toolkit) Interfaces graphiques multiplateformes
Qt wxWidgets Gtk FLTK
Bibliothèques généralistes pour le C http://www.gnu.org/software/libc/libc.html
Bibliothèques généralistes pour le C++
Boost commoncpp GNU C++ Standard Library
3D
OpenGL DirectX Mesa3D VTK
Moteurs 3D
Crystal Space Irrlicht OGRE Soya 3D
Bibliothèques audio
OpenAL FMOD SDL gstreamer
Jeux vidéo
Allegro SDL cal3d
Compression
zlib
Base de données
GDBM
Manipulation d'images
libpng libtiff libjpeg cairo ImageMagick img_img
Mathématiques
fftw Fast Fourier Transform GIAC GINAC MPFR GNU MP Bignum Library GSL NTL PARI/GP MTL LAPACK++ NIST MV++ SparseLib++ Blitz++ BLAS POOMA PETSc SVMTL
Manipulation de chaines de caractères
libiconv libint GRETA
Gestion de la console
ncurses TermCap readline
Réseau / Communication
libwww libpcap libieee1284 (parallèle) libusb
CGI
libcgi libcgicc
i18 / l10n
Signaux / Callback
libsigc++
Sérialization / Web-services
gSOAP Seal C++ Reflection
Expressions régulières (regexp)
Boost.Regex
Intelligence artificielle
Fast Artificial Neural Network Library (fann)
Design Pattern
Loki-lib
Sites sur les bibliothèques en C++
http://www.accu.org/resources/public/terse/cpp.htm
http://c.developpez.com/bibliotheques
