Skip to main content

Trobeu les biblioteques compartides d'un programa amb el comandament "ldd"

Anonim

Utilitzar el ldd comanda per mostrar les biblioteques compartides requerides per un programa determinat, útil per treballar quan hi ha una dependència perduda. L'ordre també enumera les funcions i objectes que falten.

Sintaxi de comandaments ldd

Observeu la sintaxi correcta de la comanda ldd per evitar errors:

ldd OPCIÓ … FITXER …

Utilitzeu un o més dels commutadors de comandaments de ldd disponibles, inserits a la OPCIÓ lloc al comandament anterior:

--help | imprimeix aquesta ajuda i surt --version | imprimeix la informació de la versió i surt -d, --data-relocs | deslocalització de dades del procés -r, --function-relocs | dades de processos i deslocalitzacions de funcions -u, --unused | imprimeix dependències directes no utilitzades -v, --verbose | imprimeix tota la informació

Com s'utilitza el comandament ldd

Executeu l'ordre següent per obtenir més informació sobre un programa:

$ ldd -v / path / to / program / executable

La sortida mostra la informació de la versió, així com les rutes i adreces a les biblioteques compartides, d'aquesta manera:

$ ldd libshared.so linux-vdso.so.1 => (0x00007fff26ac8000) libc.so.6 => /lib/libc.so.6 0x00007ff1df55a000) /lib64/ld-linux-x86-64.so.2 (0x00007ff1dfafe000)

Si el fitxer SO no existeix, podeu trobar les biblioteques que falten utilitzant el següent comandament:

$ ldd -d ruta / a / programa

La sortida és similar a la següent:

linux-vdso.so.1 (0x00007ffc2936b000) /home/gary/demo/garylib.so => ​​no foundlibc.so.6 => usr / lib / libc.so.6 (0x00007fd0c6259000) /lib64/ld-linux-x86-64.so.2 (0x00007fd0c65fd000)

Mai executeu la comanda ldd contra un programa que no sigui de confiança, ja que el ldd podria executar-lo. En lloc d'això, utilitzeu una alternativa més segura que mostri només les dependències directes i no tot l'arbre de dependència:

$ objdump -p / path / to / program | grep NEEDED

Com trobar el camí d'una aplicació

Heu de proporcionar la ruta completa a una aplicació si voleu trobar les seves dependències amb LD, que podeu fer de diverses maneres.

Per exemple, així és com trobaria la ruta a Firefox:

$ find / -name firefox

El problema amb l'ordre find, però, és que no només mostrarà l'executable, sinó a tot arreu on es troba Firefox, com aquest:

  • /etc/skel/.mozilla/firefox
  • / home // cache / mozilla / firefox
  • /home//.mozilla/firefox
  • / usr / bin / Firefox
  • / usr / lib / Firefox
  • / usr / lib / Firefox / Firefox

Aquest enfocament és una mica excessiu i és possible que hagueu d'utilitzar l'ordre sudo per elevar els vostres privilegis; de lo contrario, és probable que obtingueu molts errors denegats pel permís.

En canvi, és molt més fàcil utilitzar la comanda whereis per trobar la ruta d'una aplicació:

$ on és Firefox

Aquesta vegada, la sortida podria tenir aquest aspecte:

/ usr / bin / firefox

/ etc / firefox

/ usr / lib / firefox

Tot el que heu de fer ara per trobar les biblioteques compartides per a Firefox és escriure el següent comandament:

$ ldd / usr / bin / firefox

La sortida de la comanda serà una cosa així:

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 és el nom de la biblioteca i el número hexadecimal és l'adreça on es carregarà la biblioteca a la memòria.

Notaràs en moltes de les altres línies que el símbol => és seguit d'una ruta d'accés. Aquest és el camí al binari físic; el nombre hexadecimal és l'adreça on es carregarà la biblioteca.