Commande Linux ldd
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 :
- Pour les exécutables au format ELF, ldd analyse leur segment dynamique.
- Il vérifie les entrées DT_NEEDED pour déterminer les bibliothèques partagées requises.
- Il recherche ces fichiers de bibliothèque dans les chemins de bibliothèques du système.
- 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
-
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
- Alternatives :
-
Programmes liés statiquement: Pour les programmes entièrement liés statiquement, ldd affichera « not a dynamic executable ».
-
Environnements de compilation croisée: Dans les environnements de compilation croisée, vous devez utiliser l'outil ldd correspondant à la plateforme cible.
-
Erreurs courantes:
ldd: ./program: No such file or directory→ Peut être dû à un interpréteur manquant ou le programme lui-même n'existe pasldd: 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.
Autres extensions