La commande ldconfig est utilisée pour informer le système des nouveaux emplacements des bibliothèques partagées. Le utilise les informations fournies par /etc/ld.so.conf fichier de configuration.
La commande ldconfig crée une base de données de cache de toutes les bibliothèques en fonction du fichier de configuration. Ce cache est normalement stocké dans le /etc/ld.so.cache dossier.
Voici la syntaxe de la commande ldconfig :
# ldconfig [option]
Le tableau suivant décrit les options utiles de la commande ldconfig :
Option | Description |
---|---|
-v | Verbeux ; imprimer des informations supplémentaires. |
-n | Utilisez une option de ligne de commande pour spécifier l'emplacement des nouvelles bibliothèques partagées. Exemple :ldconfig -n /un/répertoire. |
-f | Spécifiez un fichier de configuration différent plutôt que celui par défaut (/etc/ld.so.conf ). |
-p | Utiliser pour imprimer une liste des bibliothèques actuelles stockées dans le fichier cache. |
Fichier de configuration /etc/ld.so.conf
Le fichier de configuration principal pour les bibliothèques partagées est le fichier /etc/ld.so.conf; cependant, il n'y a généralement qu'une seule ligne dans ce fichier :
# cat /etc/ld.so.conf include ld.so.conf.d/*.conf
La ligne include de ce fichier indique au système d'utiliser également tous les fichiers de configuration du répertoire spécifié. Dans le cas de l'exemple précédent, il s'agirait de tous les fichiers se terminant par ".conf" dans le répertoire /etc/ld.so.conf.d.
Le fichier de configuration lui-même est simple. Il contient juste un répertoire dans lequel sont stockées les bibliothèques partagées :
# more /etc/ld.so.conf.d/libiscsi-x86_64.conf /usr/lib64/iscsi # ls /usr/lib64/iscsi libiscsi.so.2 libiscsi.so.2.0.10900
Répertorier les bibliothèques en cache
Pour répertorier les bibliothèques mises en cache, vous pouvez utiliser l'option -p de la commande ldconfig comme indiqué ci-dessous :
# ldconfig -p | more 784 libs found in cache `/etc/ld.so.cache' p11-kit-trust.so (libc6,x86-64) => /lib64/p11-kit-trust.so libz.so.1 (libc6,x86-64) => /lib64/libz.so.1 libyaml-0.so.2 (libc6,x86-64) => /lib64/libyaml-0.so.2 libyajl.so.2 (libc6,x86-64) => /lib64/libyajl.so.2 libxtables.so.10 (libc6,x86-64) => /lib64/libxtables.so.10 libxslt.so.1 (libc6,x86-64) => /lib64/libxslt.so.1 libxshmfence.so.1 (libc6,x86-64) => /lib64/libxshmfence.so.1 libxml2.so.2 (libc6,x86-64) => /lib64/libxml2.so.2 libxmlrpc_util.so.3 (libc6,x86-64) => /lib64/libxmlrpc_util.so.3 libxmlrpc_server_cgi.so.3 (libc6,x86-64) => /lib64/libxmlrpc_server_cgi.so.3 libxmlrpc_server_abyss.so.3 (libc6,x86-64) => /lib64/libxmlrpc_server_abyss.so.3 ....
Ajouter de nouvelles bibliothèques à l'aide de ldconfig
Pour ajouter de nouvelles bibliothèques partagées au système, vous devez d'abord télécharger les bibliothèques sur le système et les placer dans un répertoire. Après avoir ajouté de nouvelles bibliothèques, vous devez créer un fichier de configuration dans le répertoire /etc/ld.so.conf.d, puis exécuter la commande ldconfig. Toutes ces tâches doivent être effectuées en tant qu'utilisateur root :
# ls /usr/lib64/test mylib.so.1 # cat /etc/ld.so.conf.d/libtest.conf /usr/lib64/test # ldconfig
Si la commande ldconfig s'exécute avec succès, il n'y aura pas de sortie.
Variable LD_LIBRARY_PATH
Les utilisateurs réguliers ne peuvent pas exécuter avec succès la commande ldconfig ; cependant, si un utilisateur régulier souhaite utiliser une bibliothèque partagée personnalisée, cet utilisateur peut télécharger ce fichier dans son répertoire personnel et utiliser LD_LIBRARY_PATH pour indiquer l'emplacement des fichiers de bibliothèque personnalisée, comme suit :
$ ls /home/testuser/lib mylib.so.1 $ LD_LIBRARY_PATH=/home/testuser/lib
Si elle est exécutée utilement, la dernière commande ne devrait produire aucune sortie. Pour en faire un changement permanent, placez le LD_LIBRARY_PATH=/home/testuser/lib commande dans votre ~/.bashrc fichier.
$ vi ~/.bashrc LD_LIBRARY_PATH=/home/testuser/lib export LD_LIBRARY_PATH
Commande ldd
Vous pouvez voir quelles bibliothèques partagées une commande spécifique utilise en utilisant la commande ldd. Voici la syntaxe de la commande ldd :
# ldd [options] FILE
Par exemple :
# ldd /bin/ls linux-vdso.so.1 => (0x00007ffee2b3f000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00007ff5a6c22000) libcap.so.2 => /lib64/libcap.so.2 (0x00007ff5a6a1d000) libacl.so.1 => /lib64/libacl.so.1 (0x00007ff5a6814000) libc.so.6 => /lib64/libc.so.6 (0x00007ff5a6447000) libpcre.so.1 => /lib64/libpcre.so.1 (0x00007ff5a61e5000) libdl.so.2 => /lib64/libdl.so.2 (0x00007ff5a5fe1000) /lib64/ld-linux-x86-64.so.2 (0x00007ff5a6e49000) libattr.so.1 => /lib64/libattr.so.1 (0x00007ff5a5ddc000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ff5a5bc0000)
Le but de l'utilisation de la commande ldd est de résoudre les problèmes avec le code que vous écrivez. Cette commande vous indique non seulement quelles bibliothèques sont appelées, mais plus précisément à partir de quel répertoire chaque bibliothèque est appelée. Cela peut être extrêmement utile lorsqu'une bibliothèque ne se comporte pas comme on s'y attendrait.
Le tableau suivant décrit les options utiles de la commande ldd :
Option | Description |
---|---|
-v | Verbeux ; imprimer des informations supplémentaires. |
-u | Afficher toutes les dépendances directes inutilisées. |