ldconfig

La commande ldconfig configurer le chargeur de bibliothèques partagées. Cette opération permet notamment de régénérer le cache de l'éditeur de lien dynamique.

Le cache utilisé par le chargeur se trouve dans le fichier /etc/ld.so.cache. C'est un fichier binaire qui contient la liste ordonnée des bibliothèques du système.

Les bibliothèques du cache sont recherché dans deux emplacement, les répertoires sûr: /lib et /usr/lib, et dans la liste de répertoires contenue dans le fichier /etc/ld.so.conf.

Tout changement du fichier /etc/ld.so.conf doit donc être suivit du lancement de la commande ldconfig afin que les changements soient pris en compte.

Un autre cas où ldconfig doit être utilisé, est l'ajout d'une nouvelle bibliothèque. Si une nouvelle bibliothèque est installée, elle ne sera pas immédiatement prise en compte car le chargeur ne la trouvera pas. Pour éviter ce problème, il faut lancer ldconfig après l'installation de la bibliothèque partagée.

Exemple d'utilisation

Généralement, la commande est utilisé sans options, et elle ne retourne rien. Elle doit généralement être utilisée en root car elle modifie le cache. Une exception est l'option -p qui peut être utilisé par les utilisateurs.

Après un changement de bibliothèque ou une modification du fichier /etc/ld.so.conf, il suffit de lancer:

# ldconfig

L'option -v permet d'avoir le détail des bibliothèques insérés dans le cache, cela permet de vérifier qu'une nouvelle bibliothèque est bien incluse:

# ldconfig -v
/lib:
        libx86.so.1 -> libx86.so.1
        libwrap.so.0 -> libwrap.so.0.7.6
        libvolume_id.so.0 -> libvolume_id.so.0.75.0
...

Finalement, l'option -p permet de lire le cache et de l'afficher. Cette option permet de vérifier la présence d'une bibliothèque dans le cache. Avec cette option, les droits root ne sont pas requis.

$ ldconfig -p
1195 libs found in cache `/etc/ld.so.cache'
        libz.so.1 (libc6,x86-64) => /usr/lib/libz.so.1
        libz.so.1 (libc6) => /usr/lib32/libz.so.1
        libz.so (libc6,x86-64) => /usr/lib/libz.so
        libx86.so.1 (libc6,x86-64) => /lib/libx86.so.1
        libx11globalcomm.so.1 (libc6,x86-64) => /usr/lib/libx11globalcomm.so.1
...