Commande Linux ldd

Linux 命令大全Encyclopédie des commandes Linux


ldd (Liste des dépendances dynamiques) est un outil en ligne de commande très utile dans les systèmes Linux, utilisé pour afficher les bibliothèques de liens dynamiques dont dépend un programme ou une bibliothèque partagée. Lorsque vous exécutez un programme sous Linux, le système doit charger diverses bibliothèques partagées (fichiers .so) dont dépend le programme ; ldd est l'outil utilisé pour consulter ces relations de dépendance.


Syntaxe de base de la commande ldd

ldd [选项] 可执行文件或共享库

Options courantes et descriptions des paramètres

Option Description
-v Afficher les informations détaillées sur la version
-u Afficher les dépendances directes non utilisées
-d Effectuer la réimplantation et signaler les fonctions manquantes
-r Effectuer la réimplantation et signaler les fonctions et données manquantes
--help Afficher les informations d'aide

Comment fonctionne la commande ldd

ldd est en fait un script qui exécute le programme cible en définissant des variables d'environnement spéciales, afin que le programme affiche les informations sur ses bibliothèques dépendantes lors du chargement au lieu de s'exécuter normalement. Plus précisément :

  1. Pour les exécutables au format ELF, ldd analyse leur segment dynamique.
  2. Il vérifie les entrées DT_NEEDED pour déterminer les bibliothèques partagées requises.
  3. Il recherche ces fichiers de bibliothèque dans les chemins de bibliothèques du système.
  4. Il affiche le chemin complet et le mappage des adresses mémoire de chaque bibliothèque.

Exemples d’utilisation

Exemple 1 : Affichage des dépendances d'un programme simple

ldd /bin/ls

Sortie typique :

linux-vdso.so.1 (0x00007ffd5a3f0000)
libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f8e4a3b0000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8e4a1c0000)
libpcre2-8.so.0 => /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x00007f8e4a130000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f8e4a120000)
/lib64/ld-linux-x86-64.so.2 (0x00007f8e4a400000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f8e4a100000)

Exemple 2 : Vérification des dépendances directes inutilisées

ldd -u /usr/bin/python3

Exemple 3 : Affichage des dépendances en mode verbeux

ldd -v /usr/bin/gcc

Scénarios d'application pratiques

Scénario 1 : Résolution des erreurs « bibliothèque introuvable »

Lorsqu'un programme ne peut pas s'exécuter parce qu'une bibliothèque est manquante, ldd peut aider à localiser rapidement le problème :

ldd ./my_program | grep "not found"

Scénario 2 : Vérification des conflits de version de bibliothèque

ldd -r ./my_program

Scénario 3 : Vérification de l'exactitude du chemin de la bibliothèque

ldd /path/to/your/executable | awk '{print $3}' | xargs ls -la

Remarques et problèmes courants

  1. Avertissement de sécurité: N'utilisez pas ldd sur des exécutables non fiables, car il tente en réalité d'exécuter des parties du code du programme.

    • Alternatives :objdump -p /path/to/program | grep NEEDED
  2. Programmes liés statiquement: Pour les programmes entièrement liés statiquement, ldd affichera « not a dynamic executable ».

  3. Environnements de compilation croisée: Dans les environnements de compilation croisée, vous devez utiliser l'outil ldd correspondant à la plateforme cible.

  4. Erreurs courantes:

    • ldd: ./program: No such file or directory→ Peut être dû à un interpréteur manquant ou le programme lui-même n'existe pas
    • ldd: exited with unknown exit code→ Le programme peut planter pendant l'exécution

Astuces avancées

1. Utiliser readelf pour afficher des informations de dépendance plus détaillées

readelf -d /path/to/program | grep NEEDED

2. Utiliser la variable d'environnement LD_TRACE_LOADED_OBJECTS

LD_TRACE_LOADED_OBJECTS=1 /path/to/program

3. Vérifier l'arbre de dépendances des bibliothèques

ldd /path/to/library.so | awk '{print $3}' | xargs ldd

Résumé

ldd est un outil indispensable dans l'administration des systèmes Linux et le débogage de programmes. Il peut :

  • Afficher rapidement les relations de dépendance des bibliothèques dynamiques d'un programme
  • Aider à résoudre les problèmes de bibliothèques manquantes ou de conflits de versions
  • Vérifier si l'environnement d'exécution du programme est complet
  • Aider à l'empaquetage et au déploiement de logiciels

Maîtriser l'utilisation de la commande ldd peut grandement améliorer votre efficacité dans la résolution des problèmes de dépendances dans l'environnement Linux.


Linux 命令大全Encyclopédie des commandes Linux

Autres extensions