Gebruik de ldd commando om de gedeelde bibliotheken te tonen die vereist zijn voor een bepaald programma. Het ldd-commando is handig om te bepalen wanneer er een afhankelijkheid ontbreekt. De opdracht vermeldt ook ontbrekende functies en objecten.
ldd-opdrachtsyntaxis
Let op de juiste syntaxis voor het ldd-commando om fouten te voorkomen: ldd [OPTION]… HET DOSSIER…
Gebruik een of meer van de beschikbare ldd-opdrachtschakelaars, ingevoegd in de [OPTION] plek in het bovenstaande commando:
- –help: druk deze help af en sluit af.
- –version: versie-informatie afdrukken en afsluiten.
- -d, –relocs: Verplaatsingen van gegevens verwerken.
- -r, –function-relocs: Procesgegevens en functieverhuizingen.
- -u, –unused: Druk ongebruikte directe afhankelijkheden af.
- -v, –verbose: alle informatie afdrukken.
Hoe de ldd-opdracht te gebruiken
Voer de volgende opdracht uit om meer informatie over een programma te krijgen: ldd -v /path/to/program/executable
De uitvoer toont versie-informatie evenals de paden en adressen naar de gedeelde bibliotheken, zoals deze: libshared.so
linux-vdso.so.1 => (0x00007fff26ac8000)
libc.so.6 => /lib/libc.so.6 0x00007ff1df55a000)
/lib64/ld-linux-x86-64.so.2 (0x00007ff1dfafe000)
Als het SO-bestand helemaal niet bestaat, kunt u de ontbrekende bibliotheken vinden met de volgende opdracht: ldd -d path/to/program
De uitvoer is vergelijkbaar met het volgende: linux-vdso.so.1 (0x00007ffc2936b000)
/home/gary/demo/garylib.so => niet gevondenlibc.so.6 => usr/lib/libc.so.6 (0x00007fd0c6259000)
/lib64/ld-linux-x86-64.so.2 (0x00007fd0c65fd000)
Voer nooit het ldd-commando uit tegen een niet-vertrouwd programma, omdat het ldd-commando het zou kunnen uitvoeren. Gebruik in plaats daarvan een veiliger alternatief dat alleen de directe afhankelijkheden toont en niet de hele afhankelijkheidsboom: objdump -p /path/to/program | grep NODIG
Het pad naar een toepassing vinden
U moet het volledige pad naar een toepassing opgeven als u de afhankelijkheden met ldd wilt vinden, wat u op verschillende manieren kunt doen. Zo vindt u bijvoorbeeld het pad naar Firefox: find / -name firefox
Het probleem met het find-commando is echter dat het het uitvoerbare bestand en overal waar Firefox zich bevindt opsomt, zoals dit: /etc/skel/.mozilla/firefox
/home//cache/mozilla/firefox
/home//.mozilla/firefox
/usr/bin/Firefox
/usr/lib/Firefox
/usr/lib/Firefox/Firefox
Deze aanpak is een beetje overdreven en je moet misschien het sudo-commando gebruiken om je privileges te verhogen, anders krijg je waarschijnlijk man-permissie-geweigerde fouten. Het is in plaats daarvan gemakkelijker om de opdracht whereis te gebruiken om het pad van een toepassing te vinden: whereis firefox
Deze keer zou de uitvoer er als volgt uit kunnen zien: /usr/bin/firefox
/etc/firefox
/usr/lib/firefox
Voer vervolgens de volgende opdracht in om de gedeelde bibliotheken voor Firefox te vinden: ldd /usr/bin/firefox
De uitvoer van de opdracht zal er ongeveer zo uitzien: linux-vdso.so.1 (0x00007ffff8364000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007feb9917a000)
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007feb98f76000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007feb98bf4000)
libm.so.6 => /usr/lib/libm.so.6 (0x00007feb988f6000)
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007feb986e0000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007feb9833c000)
/lib64/ld-linux-x86-64.so.2 (0x00007feb99397000)
Linux-vdso.so.1 is de naam van de bibliotheek en het hexadecimale nummer is het adres waarnaar de bibliotheek in het geheugen wordt geladen. Op veel lijnen is de => symbool wordt gevolgd door een pad. Dit is het pad naar het fysieke binaire. Het hexadecimale nummer is het adres waar de bibliotheek is geladen.