Usando o comando "ldd" en Linux

O comando ldd pode usarse para mostrarlle as bibliotecas compartidas que require un programa determinado.

Isto é útil para traballar cando hai unha dependencia perdida e pódese empregar para listar funcións e obxectos perdidos.

Sintaxe de comando ldd

Esta é a sintaxe correcta cando se usa o comando ldd:

ldd [OPCIÓN] ... FICHEIRO ...

Aquí están os interruptores de comando ldd dispoñibles que se poden inserir no lugar [OPTION] no comando anterior:

--help imprimir esta axuda e saír --versión imprimir información de versión e saír -d, --data-relocs procesamento de datos de procesamento de datos -r, --function-relocs de datos de proceso e deslocalizacións de funcións -u, --uncións impresas non empregadas dependencias directas -v, --verbose imprimir toda a información

Como usar o comando ldd

Podes usar o comando seguinte para obter máis información de calquera comando ldd:

ldd -v / path / to / program / executable

A saída mostra a información da versión así como as rutas e enderezos ás bibliotecas compartidas, así:

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 o ficheiro SO non existe en absoluto, podes atopar as bibliotecas que faltan usando o seguinte comando:

ldd -d ruta / a / programa

A saída é similar á seguinte:

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)

Importante: Nunca execute o comando ldd contra un programa non confiable xa que o comando realmente pode executalo. Esta é unha alternativa máis segura que só mostra as dependencias directas e non a árbore de dependencia completa: objdump -p / path / to / program | grep NECESARIO .

Como atopar o camiño para unha aplicación

Ten que proporcionar o camiño completo a unha aplicación se quere atopar as súas dependencias con ldd, que pode facer de varias maneiras.

Por exemplo, así é como atoparías a ruta para Firefox :

atopar / -name firefox

O problema co comando find , con todo, é que non só mostrará o executable senón onde está localizado Firefox, así:

Este enfoque é un pouco de exceso e pode ter que usar o comando sudo para elevar os seus privilexios; é máis probable que teña moitos erros autorizados.

En cambio, é moito máis sinxelo usar o comando whereis para atopar a ruta da aplicación:

onde está Firefox

Nesta ocasión a saída podería ser así:

/ usr / bin / firefox

/ etc / firefox

/ usr / lib / firefox

Todo o que tes que facer agora para atopar as bibliotecas compartidas para Firefox é escribir o seguinte comando:

ldd / usr / bin / firefox

A saída do comando será algo así:

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)

O linux-vdso.so.1 é o nome da biblioteca eo número hex é o enderezo onde se cargará a biblioteca na memoria.

Notarás en moitas das outras liñas que o símbolo => é seguido por unha ruta. Este é o camiño para o binario físico; o número hexadecimal é a dirección onde se cargará a biblioteca.