Les bibliothèques partagées ne sont chargées que lorsqu'un programme les appellent, ce qui permet de gagner de la place en mémoire. Pour savoir à quelles bibliothèques partagées est lié un programme, utiliser la commande ldd
. Par exemple pour le programme /usr/bin/X11/xterm
:
ldd /usr/bin/X11/xterm
Le résultat devrait ressembler à ca :
libXaw.so.6 => /usr/X11R6/lib/libXaw.so.6 (0x4000b000) libXmu.so.6 => /usr/X11R6/lib/libXmu.so.6 (0x40042000) libXt.so.6 => /usr/X11R6/lib/libXt.so.6 (0x40054000) libSM.so.6 => /usr/X11R6/lib/libSM.so.6 (0x40096000) libICE.so.6 => /usr/X11R6/lib/libICE.so.6 (0x4009f000) libXext.so.6 => /usr/X11R6/lib/libXext.so.6 (0x400b4000) libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x400bf000) libc.so.5 => /lib/libc.so.5 (0x4015e000)
La ligne libc.so.5 => /lib/libc.so.5 (0x4015e000)
par exemple indique la bibliothèque C standard de version 5.
L'éditeur de liens dynamiques ld.so
recherchera les bibliothèques dans les répertoires /lib
, /usr/lib
, et dans les répertoires spécifiés dans le fichier /etc/ld.so.conf
et dans la variable d'environement $LD_LIBRARY_PATH
(utile pour ses propres bibliothèques confidentielles, par exemple). Il faut par ailleurs invoquer la commande ldconfig
après chaque modification du fichier /etc/ld.so.conf
.
Les bibliothèques partagées ont une extension .so et se trouvent en général dans le répertoire /lib
. Le système recherche toujours sur le numéro de version majeur les noms de bibliothèques : /lib/libc.so.5.4.33
a un numéro majeur de version 5 et un numéro mineur de version 4, par exemple. La bibliothèque recherchée sera /lib/libc.so.5
, qui est un lien symbolique vers /lib/libc.so.5.4.33
comme l'indique la commande ls -l
:
lrwxrwxrwx 1 root root 13 Nov 3 17:58 /lib/libc.so.5 -> libc.so.5.4.33* -rwxr-xr-x 1 root root 634880 Apr 29 1996 /lib/libc.so.5.4.33*