Un article de Wikipedia.y-project.com.
En informatique, une bibliothèque logicielle est 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.
[] 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 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 :
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 bibliothè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++.
/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
ODE
Newton Dynamics
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 chaînes 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
DernierMirror
Le Texte ci-dessus est disponible sous GNU Free Documentation License.
La source est wikipedia http://fr.wikipedia.org/wiki/bibliothèque logicielle