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
|
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) |
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é.