Encontre as bibliotecas compartilhadas de um programa com o comando 'ldd'

Use o ldd comando para mostrar as bibliotecas compartilhadas exigidas por um determinado programa. O comando ldd é útil para resolver quando há uma dependência ausente. o comando também lista funções e objetos ausentes.

Sintaxe do comando ldd

Observe o adequado sintaxe para o comando ldd para evitar erros:

ldd [OPÇÃO]... ARQUIVO...

Use uma ou mais das opções de comando ldd disponíveis, inseridas no local [OPÇÃO] no comando acima:

  • --help: Imprime esta ajuda e sai.
  • --version: Imprime informações sobre a versão e sai.
  • -d, --data-relocs: Processa realocações de dados.
  • -r, --function-relocs: Processar dados e realocações de função.
  • -u, --unused: Imprime dependências diretas não utilizadas.
  • -v, --verbose: Imprime todas as informações.

Como usar o comando ldd

Execute o seguinte comando para obter mais informações sobre um programa:

ldd -v / caminho / para / programa / executável

A saída mostra informações de versão, bem como os caminhos e endereços para as bibliotecas compartilhadas, como este:

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

Se o arquivo SO não existir, você pode encontrar as bibliotecas ausentes usando o seguinte comando:

ldd -d caminho / para / programa

O resultado é semelhante ao seguinte:

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

Nunca execute o comando ldd em um programa não confiável porque o comando ldd pode executá-lo. Em vez disso, use uma alternativa mais segura que mostre apenas as dependências diretas e não toda a árvore de dependências:

objdump -p / caminho / para / programa | grep NECESSÁRIO
Linux objdump ldd alternativa

Como encontrar o caminho para um aplicativo

Você deve fornecer o caminho completo para um aplicativo se quiser localizar suas dependências com o ldd, o que pode ser feito de várias maneiras.

Por exemplo, é assim que encontrar o caminho para Raposa de fogo:

find / -name firefox

O problema com o encontrar comando, no entanto, é que ele lista o executável e todos os lugares onde o Firefox está localizado, assim:

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

Esta abordagem é um pouco exagerada e você pode precisar usar o comando sudo para elevar seus privilégios, caso contrário, você provavelmente obterá erros de permissão negada do homem.

Em vez disso, é mais fácil usar o onde está o comando para encontrar o caminho de um aplicativo:

onde está o firefox

Desta vez, a saída pode ser assim:

/usr/bin/firefox
/etc/firefox
/usr/lib/firefox
Comando whereis do Linux

Em seguida, para encontrar as bibliotecas compartilhadas para Firefox, digite o seguinte comando:

ldd / usr / bin / firefox

A saída do comando será algo assim:

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 é o nome da biblioteca e o número hexadecimal é o endereço onde a biblioteca é carregada na memória.

Em muitas linhas, o => o símbolo é seguido por um caminho. Este é o caminho para o binário físico. O número hexadecimal é o endereço onde a biblioteca é carregada.