Eu sei que existe um comando que lista as bibliotecas e as respectivas versões às quais um software foi vinculado.
Algo com ld ou libtool?
Mas simplesmente não consigo me lembrar. Passei algum tempo no Google, mas não encontrei nada útil.
Atualizar
ldd <binary>
ajudaria no Linux, (de@Ernesto) enquanto descobri que otool -L <binary>
faz algo semelhante no MacOS X.
Responder1
Tente lddbinário-exec
Exemplo:
~$ ldd /bin/bash
linux-gate.so.1 => (0x00606000)
libncurses.so.5 => /lib/libncurses.so.5 (0x00943000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0x00c5d000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x003e9000)
/lib/ld-linux.so.2 (0x00a41000)
Responder2
Para encontrar o que ele precisa diretamente:
readelf -d APP | grep NEEDED
ldd
como mencionado em outro lugar, mostrará todas as bibliotecas diretas e indiretas - tudo o que precisa em tempo de execução. Esta pode não ser uma lista completa, já que você pode abrir coisas dinamicamente com dlopen(), mas isso deve funcionar 99% das vezes.
ld e libtool são usados em tempo de compilação/link. Eles não são úteis quando você tem um aplicativo.
EDITARPosso ver pelas respostas posteriores que você estava perguntando sobre o OSX, mas quero acrescentar algo à minha resposta sobre ferramentas Linux:
Uma coisa que esqueci de mencionar há algum tempo; você perguntou sobre versões. Nem responderá à pergunta "qual versão" ldd
. readelf
Eles lhe dirão o nome do arquivo da biblioteca que você está procurando, e a convenção de nomenclatura pode conter algumas informações de versão, mas nada impõe isso. Os símbolos podem ser versionados, e você teria que usar um nível ainda mais baixo para nm
vê-los,
Responder3
Outra maneira seria usar objdump.
objdump -x "binário" | grep NECESSÁRIO
Isso mostra todas as dependências necessárias apenas para este binário. Muito útil.
Responder4
Ooutras respostasperder um ponto importante:
Bibliotecas compartilhadas podem serdiretamentevinculado, ouindiretamentevinculado através de outra biblioteca.
Para apenas odiretamente ligado:
objdump --private-headers "${bin}" | grep 'NECESSÁRIO' | cortar --delimitador=' ' --fields=18-
Paratodos:
ldd "${bin}" | cortar --campos=2 | cortar --delimitador=' ' --fields=1 | rev | cortar --delimitador='/' --fields=1 | rev | classificar --unique --version-sort