Buscar bibliotecas con las que se vinculó un binario

40

Sé que hay un comando que me enumera las bibliotecas y las versiones respectivas con las que se vinculó un software.

¿Algo con ld o libtool?

Pero simplemente no puedo recordar. Pasé un tiempo en google pero no se me ocurrió nada útil.

La actualización
ldd <binary> ayudaría en Linux, ( de @ Ernelli ) mientras descubrí que otool -L <binary>hace algo similar en MacOS X.

er4z0r
fuente
stackoverflow.com/questions/50159/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

42

Prueba ldd binary-exec

Ejemplo:

~$ 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)
Ernelli
fuente
Dang! Así que mi primer intento fue correcto. Solo necesito instalarlo en mi Mac para que conozca el comando ;-)
er4z0r
@ er4z0r: FYI, Mac OS es BSD, no Linux .
Grawity
66
Grwaity: tienes razón. Mientras que ldd ayudaría en Linux, encontré que 'otool -L <binary>' hace algo similar.
er4z0r
15

Para encontrar lo que necesita directamente:

readelf -d APP | grep NEEDED

lddcomo se menciona en otra parte, mostrará todas las librerías directas e indirectas, todo lo que necesita en tiempo de ejecución. Puede que no sea una lista completa, ya que puede abrir dinámicamente cosas con dlopen (), pero debería funcionar el 99% del tiempo.

ld y libtool se usan en tiempo de compilación / enlace. No son útiles una vez que tienes una aplicación.

EDITAR Puedo ver en respuestas posteriores que estaba preguntando sobre OSX, pero quiero agregar a mi respuesta sobre las herramientas de Linux:

Una cosa que olvidé mencionar, hace bastante tiempo; preguntaste sobre las versiones. Ni lddtampoco readelfresponderá la pregunta "qué versión". Le indicarán el nombre de archivo de la biblioteca que está buscando, y la convención de nomenclatura puede tener alguna información de versión, pero nada lo impone. Los símbolos pueden ser versionados, y tendrías que tener un nivel aún más bajo nmpara verlos,

Rich Homolka
fuente
9

Otra forma sería usar objdump.

objdump -x "binario" | grep NECESARIO

Esto muestra todas las dependencias necesarias solo para este binario. Muy útil.

Pranav
fuente