Usare il comando «ldd» in Linux

Usare il comando ldd per mostrare le librerie condivise richieste da un dato programma – utile per lavorare quando manca una dipendenza. Il comando elenca anche le funzioni e gli oggetti mancanti.

Sintassi dei comandi ldd

Osservare la sintassi corretta per il comando ldd per evitare errori:

vecchio [OPZIONE]... FILE....

Utilizzare uno o più degli interruttori di comando ldd disponibili, inseriti nello spot [OPTION] nel comando di cui sopra:

 ----aiuto | stampare questo aiuto e uscire

--versione | informazioni sulla versione di stampa e uscita

-d, --data-relocs | riposizionamento dei dati di processo
.
-r, --function-relocs | dati di processo e rilocazioni di funzioni

-v, --verbose |stampa tutte le informazioni

Come usare il comando ldd

Eseguire il seguente comando per ottenere maggiori informazioni su un programma:

ldd -v /path/to/program/executable

Sì.

L'output mostra le informazioni sulla versione, nonché i percorsi e gli indirizzi delle librerie condivise, in questo modo:

libshared.so

linux-vdso.so.so.1 => (0x0000007fff26ac8000)

.

Sì.
libc.so.6 => /lib/libc.so.6 0x0000007ff1df55a000)

Sì.
/lib64/ld-linux-x86-64.so.2 (0x0000007ff1dfafe000)

.

Sì.

Se il file SO non esiste affatto, è possibile trovare le librerie mancanti utilizzando il seguente comando:

ldd -d path/to/programma
L'uscita è simile alla seguente:

linux-vdso.so.1 (0x0000007ffc2936b000)

linux-vdso.so.1 (0x00007ffc2936b000)
/home/gary/demo/garylib.so => non foundlibc.so.6 => usr/lib/libc.so.6 (0x0000007fd0c6259000)

.
/lib64/ld-linux-x86-64.so.2 (0x0000007fd0c65fd000)

.

Non eseguire mai il comando ldd contro un programma non affidabile perché l'ldd potrebbe effettivamente eseguirlo. Utilizzare invece un'alternativa più sicura che mostri solo le dipendenze dirette e non l'intero albero delle dipendenze:

lavoro -p /p /path/to/program | grep NEEDEDED

Sì.

Come trovare il percorso di un'applicazione

Dovete fornire il percorso completo di un'applicazione se volete trovare le sue dipendenze con ldd, cosa che potete fare in diversi modi.

Per esempio, questo è il modo in cui trovereste la strada per Firefox:

trovare / -nome firefox
Il problema con il comando find , tuttavia, è che non elencherà solo l'eseguibile, ma ovunque si trovi Firefox, come questo:

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

Questo approccio è un po' eccessivo e potrebbe essere necessario utilizzare il comando sudo per elevare i propri privilegi, altrimenti è probabile che si ottengano molti errori dovuti al permesso.

E' invece molto più facile usare il comando whereis per trovare il percorso di un'applicazione:

dove c'è firefox

Sì.

Questa volta l'uscita potrebbe essere così:

/usr/bin/firefox

/etc/firefox

/usr/lib/firefox

Tutto quello che dovete fare ora per trovare le librerie condivise per Firefox è digitare il seguente comando:

ldd /usr/bin/bin/firefox

vecchio /usr/bin/firefox
L'output del comando sarà qualcosa del genere:

linux-vdso.so.1 (0x0000007ffffff8364000)

linux-vdso.so.1 (0x00007ffffff8364000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x0000007feb9917a000)

.
libdl.so.2 => /usr/lib/libdl.so.2 (0x0000007feb98f76000)

.
libstdc++.so.6 => /usr/lib/libstdc+++.so.6 (0x0000007feb98bff4000)

.
libm.so.6 => /usr/lib/libm.so.6 (0x0000007feb988f6000)

.
libgcc_s.so.1 => /usr/lib/libggcc_s.so.1 (0x0000007feb986e0000)

.
libc.so.6 => /usr/lib/libc.so.6 (0x0000007feb9833c000)

.
/lib64/ld-linux-x86-64.so.2 (0x0000007feb99397000)

.

Linux-vdso.so.1 è il nome della libreria e il numero esadecimale è l'indirizzo dove la libreria verrà caricata in memoria.

Noterete su molte delle altre righe che il simbolo => è seguito da un percorso. Questo è il percorso del binario fisico; il numero esadecimale è l'indirizzo dove verrà caricata la libreria.

Deja un comentario