next up previous contents Next: Installation de fichiers DLL.so. Up: Bibliothèques partagées. Previous: Création de fichiers DLL.so.   Table des matières  

24.2 Versions de DLL.

Vous avez remarqué que nos trois fichiers .so sont similaires à de nombreux fichiers de /lib et de /usr/lib. Ce système complexe d'édition de liens et de création de liens symboliques est une partie du processus de définition des versions des bibliothèques (library versioning). Bien que la création d'une bibliothèque partagée soit hors du cadre des tâches usuelles d'administration, la définition des versions des bibliothèques est importante à comprendre.

Les DLLs présentent un problème. Supposons qu'une DLL soit boguée ou obsolète. Si le fichier DLL est écrasé par un fichier à jour, l'ensemble des applications ayant recours à cette DLL sera affecté. Si ces applications dépendent de certains comportements du code contenu dans cette DLL, elles planteront très certainement à l'appel de la nouvelle version. UNIX a résolu le problème de manière élégante en permettant à de multiple versions des DLLs d'être présentes simultanément. Les programmes possèdent eux-mêmes le numéro de version à utiliser. Essayez:

ldd mon_test  


Ceci indique les fichiers DLL que mon_test peut lier (il est programmé pour cela):

libsimple_math.so.1.0.0 => ./libsimple_math.so.1.0.0 (0x40018000) 
libc.so.6 => /lib/libc.so.6 (0x40022000) 
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) 


Pour l'instant, nous sommes intéressé par libsimple_math.so.1.0. Observez bien la manière dont est établie la correspondance de la variable SOVERSION dans Makefile. Remarquez aussi comment nous avons choisi notre lien symbolique. Nous permettons effectivement à mon_test de se lier à toute future bibliothèque libsimple_math.so.1.0.? (ce qui fait que la bibliothèque simple_math peut être mise à jour sous forme d'une nouvelle version). Ceci a pu être réalisé grâce au lien symbolique. Cependant, le lien ne se produira pas avec une version du type libsimple_math.so.1.1.? par exemple. Comme développeurs de libsimple_math, nous avons décidé que les bibliothèques ayant un numéro de version mineur différent seront incompatibles, tandis que les bibliothèques de niveau de patch différent seront compatibles [dans notre exemple, nous avons considéré que le nom d'un bibliothèque était du type libname.so.majeur.mineur.patch].

Nous pourrions changer SOVERSION en libsimple_math.so.1. Ceci reviendrait à dire que les futures bibliothèques de numéros de version mineure différents sont compatibles; seule une modification du numéro majeur engendrerait l'incompatibilité.


next up previous contents Next: Installation de fichiers DLL.so. Up: Bibliothèques partagées. Previous: Création de fichiers DLL.so.   Table des matières  
1-01-2006