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 :

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 :

Le chargement des bibliothèques peut survenir de deux manières :

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
 

See also: Bibliothèque logicielle, Allegro, Années 1960, Application Programming Interface, Bibliothèque, Bibliothèque C ANSI, C plus plus, Clavier informatique