Dynamic Link Library

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Page d'aide sur l'homonymie Pour les articles homonymes, voir DLL et Dynamic.

DLL (abrégé de Dynamic Link Library) est un format de fichiers de bibliothèques logicielles commun sur les systèmes d'exploitation Microsoft Windows et IBM OS/2[1]. Ces bibliothèques logicielles existent dans Windows depuis 1985 et utilisent la technique des liens dynamiques (en anglais : dynamic link) pour permettre de les associer avec les programmes qui s'en servent[2].

Les fichiers DLL sont une des fondations des systèmes d'exploitation Windows et ils sont utilisés pour les interfaces de programmation, les pilotes, les widgets et les polices de caractères.

Fonctionnement[modifier | modifier le code]

Un programme informatique est construit à partir d'un ensemble de fichiers source contenant des fonctions[2]. Les bibliothèques logicielles sont des lots de fonctions stockées dans des fichiers. Une bibliothèque logicielle contient généralement un ensemble de fonctions autour du même sujet[3]. Par cette technique, une modification subséquente d'une des fonctions de la bibliothèque nécessite de la re-créer, sans qu'il soit nécessaire de re-créer la totalité de l'application[2].

Cette technique nécessite de charger en mémoire les fichiers de bibliothèque en même temps que le programme qui les utilise[4], ensuite de quoi un programme — l'éditeur de liens — rend l'application opérationnelle en tissant des liens entre les différents fichiers[4].

Les bibliothèques logicielles peuvent être :

  • Statiques :

Une bibliothèque statique est incorporée dans un programme et l'édition de liens est effectuée pendant sa construction. Lorsqu'une bibliothèque statique est modifiée, chaque programme qui l'utilise doit être reconstruit pour incorporer les modifications[3] ;

  • Partagées :

Une bibliothèque partagée n'est pas incorporée dans les programmes qui l'utilisent, mais est reliée à ces programmes lors de leur chargement, c'est-à-dire immédiatement avant l'exécution du programme. Une bibliothèque partagée peut être utilisée par de nombreux programmes et une modification de la bibliothèque ne nécessite pas de reconstruction des programmes, du moment que l'interface de programmation de la bibliothèque ne change pas[3] ;

  • Dynamiques :

Les bibliothèques dynamiques sont identiques aux bibliothèques partagées, mais sont utilisées d'une manière différente. De telles bibliothèques sont reliées à l'application lorsque celle-ci en a besoin. Les programmes qui les utilisent comportent les instructions nécessaires au chargement et à la liaison[3].

Dans la technique de la liaison dynamique utilisée par les DLL, l'opération de liaison est exécutée en deux temps : tout d'abord, au moment de la construction de l'application, l'éditeur de liens crée des connecteurs, puis au chargement — immédiatement avant l'exécution de l'application — les connecteurs sont reliés entre eux[4]. Les DLL sont au format COFF, également utilisé dans IBM AIX[5].

Dans Windows[modifier | modifier le code]

Les DLL sont une des fondations des systèmes d'exploitation Windows. Les fonctions internes de Windows sont mises à disposition des programmes par des interfaces de programmation mises en oeuvre par des fichiers DLL[6]. Les trois principales bibliothèques sont User32.dll (manipulation de l'interface utilisateur), GDI32.dll (manipulation des dispositifs d'impression et d'affichage), et Kernel32.dll (utilisation des fonctions du noyau de Windows concernant les fichiers et les processus). D'autres fichiers de Windows souvent utilisés en programmation sont comdlg32.dll, MAPI32.dll, netapi32.dll et winmm.dll[6]. Les fichiers DLL sont également utilisés pour de nombreuses extensions : pilotes, boîtes de dialogue, widgets, polices de caractères[7].

Windows offre la possibilité de détourner ou de subtiliser les fonctions des DLL. Outre des raisons légitimes, ces possibilités sont exploitées par des rootkit, qui injectent des fonctionnalités à l'insu et contre le gré de l'utilisateur en subtilisant les DLL du système d'exploitation[8].

Programmation[modifier | modifier le code]

Des langages comme par exemple C, C++ ou Delphi sont aptes à créer des DLL qui peuvent être exploitées par d'autres programmes. De nombreux outils de développement qui proposent des bibliothèques d'exécution à l'instar des MFC ou de la VCL de Borland proposent soit une liaison statique (intégration directe du code dans l'exécutable) soit une liaison dynamique (la bibliothèque est alors à distribuer sous forme de DLL).

L'utilisation de DLL permet de mettre à disposition du code et de rendre modulaire l'architecture d'une application. La mise à jour de celle-ci peut également se faire en remplaçant uniquement les DLL obsolètes. Néanmoins, l'utilisation de plusieurs versions concurrentes de DLL est problématique sous Windows et conduit à certaines incompatibilités regroupées sous le terme DLL Hell.

DLL hell - l'enfer des DLL[modifier | modifier le code]

La construction des DLL permet de facilement les remplacer pour y ajouter des nouvelles fonctions et améliorer les fonctions existantes. Il arrive cependant que le remplacement entraîne des modifications en profondeur des fonctions existantes, ce qui entraîne des pannes et un fonctionnement erroné des programmes qui l'utilisent. C'est une cause connue d'appels aux services techniques qui ont baptisé ce phénomène DLL hell, « l'enfer des DLL » en anglais[9].

Lorsqu'un fichier DLL manque sur l'ordinateur de l'utilisateur, le lancement d'un programme qui s'en sert provoquera un message DLL Not found (« DLL non trouvée ») qui n'est d'aucune utilité pour l'utilisateur. Si la DLL existe mais n'est pas valable pour le programme, alors celui-ci n'a aucun moyen de le vérifier, ce qui peut entraîner des messages DynaLink error voire un crash du programme[10]. Une des causes de tels incidents est que Windows n'offre pas de mécanisme interne de contrôle de version — mécanisme qui garantit qu'un programme sera associé avec la bibliothèque pour laquelle il a été construit[5].

Un des moyens qu'ont les programmeurs de lutter contre le DLL hell est de charger explicitement le fichier DLL : au lieu que le fichier soit automatiquement chargé au lancement du programme qui l'utilise, le programme utilise la fonction LoadLibrary, qui charge le fichier s'il existe[10].

Notes et références[modifier | modifier le code]

  1. (en)InfoWorld, 23 mai 1988 (ISSN 0199-6649).
  2. a, b et c (en)I. A. Dhotre - A. A. Puntambekar, Systems Programming, Technical Publications - 2008 (ISBN 9788184313925).
  3. a, b, c et d (en)Sibsankar Haldar - Alex Alagarsamy Aravind, Operating Systems, Pearson Education India - 2010 (ISBN 9788131730225).
  4. a, b et c (en)Joseph A. Fisher - Paolo Faraboschi - Clifford Young,Embedded Computing: A Vliw Approach To Architecture, Compilers And Tools, Elsevier - 2005, (ISBN 9781558607668).
  5. a et b (en)John Calcote, Autotools: A Practitioner's Guide to GNU Autoconf, Automake, and Libtool, No Starch Press - 2010 (ISBN 9781593272067).
  6. a et b Greg Perry, Visual Basic 6, Pearson Education France (ISBN 9782744040825).
  7. (en)Marco Cantu, Mastering Delphi 6, John Wiley & Sons - 2006 (ISBN 9780782152784).
  8. (en)Greg. Hoglund - James Butler, Rootkits: Subverting the Windows Kernel, Addison-Wesley Professional - 2006 (ISBN 9780321294319).
  9. (en)Kate Gregory, Microsoft Visual C++ .Net 2003: Kick Start, Sams Publishing - 2004 (ISBN 9780672326004).
  10. a et b (en)Mark A. Deloura, Game Programming: Gems 2, Cengage Learning - 2001 (ISBN 9781584500544).

Voir aussi[modifier | modifier le code]

Bibliographie[modifier | modifier le code]

  • Hart, Johnson. Windows System Programming Third Edition. Addison-Wesley, 2005. ISBN 0-321-25619-0
  • Rector, Brent et al. Win32 Programming. Addison-Wesley Developers Press, 1997. ISBN 0-201-63492-9.

Liens externes[modifier | modifier le code]