Skip to main content

Trova le librerie condivise di un programma con il comando "ldd"

Minecraft - Come Usare World Edit - Guida - Tutti Comandi (Aprile 2025)

Minecraft - Come Usare World Edit - Guida - Tutti Comandi (Aprile 2025)
Anonim

Utilizzare il ldd comando per mostrare le librerie condivise richieste da un dato programma - utile per lavorare quando c'è una dipendenza mancante. Il comando elenca anche funzioni e oggetti mancanti.

Sintassi del comando ldd

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

ldd OPTION … FILE …

Utilizzare uno o più degli interruttori di comando ldd disponibili, inseriti nel OPZIONE individuare nel comando precedente:

--help | stampa questo aiuto ed esci --version | stampa informazioni sulla versione ed esce -d, --data-relocs | elaborare i trasferimenti di dati -r, --function-relocs | elaborare dati e riposizionamenti di funzioni -u, --unused | stampa dipendenze dirette non utilizzate -v, --verbose | stampare tutte le informazioni

Come usare il comando ldd

Esegui il seguente comando per ottenere ulteriori informazioni su un programma:

$ ldd -v / percorso / a / programma / eseguibile

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

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

Se il file SO non esiste affatto, puoi trovare le librerie mancanti usando il seguente comando:

$ ldd -d percorso / a / programma

L'output è simile al seguente:

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

Non eseguire mai il comando ldd su un programma non attendibile perché il ldd potrebbe effettivamente eseguirlo. Invece, utilizzare un'alternativa più sicura che mostra solo le dipendenze dirette e non l'intero albero delle dipendenze:

$ objdump -p / percorso / per / programma | grep NECESSARIO

Come trovare il percorso per un'applicazione

Devi fornire il percorso completo a un'applicazione se vuoi trovare le sue dipendenze con ldd, cosa che puoi fare in diversi modi.

Ad esempio, questo è il modo in cui troverai il percorso per Firefox:

$ find / -name firefox

Il problema con il comando find, tuttavia, è che non solo elencherà 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 privilegi, altrimenti è probabile che si verifichino molti errori di autorizzazione negati.

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

$ whereis firefox

Questa volta l'output potrebbe essere simile a questo:

/ Usr / bin / firefox

/ Etc / firefox

/ Usr / lib / firefox

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

$ ldd / usr / bin / firefox

L'output del comando sarà qualcosa del genere:

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 è il nome della libreria e il numero esadecimale è l'indirizzo in cui la libreria verrà caricata in memoria.

Noterai su molte delle altre linee che il simbolo => è seguito da un percorso. Questo è il percorso per il binario fisico; il numero esadecimale è l'indirizzo in cui verrà caricata la libreria.