Sé que hay un comando que me enumera las bibliotecas y las versiones respectivas a las que se vinculó un software.
¿Algo con ld o libtool?
Pero simplemente no puedo recordarlo. Pasé algún tiempo en Google pero no encontré nada útil.
Actualizar
ldd <binary>
ayudaría en Linux, (de@Ernelli) mientras descubrí que otool -L <binary>
hace algo similar en MacOS X.
Respuesta1
Prueba lddejecutivo-binario
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)
Respuesta2
Para encontrar lo que necesita directamente:
readelf -d APP | grep NEEDED
ldd
como se mencionó en otra parte, mostrará todas las bibliotecas directas e indirectas: todo lo que necesita en tiempo de ejecución. Puede que esta no sea una lista completa, ya que puedes abrir cosas dinámicamente con dlopen(), pero esto debería funcionar el 99% de las veces.
ld y libtool se utilizan en el momento de la compilación/enlace. No son útiles una vez que tienes una aplicación.
EDITARPuedo ver en las respuestas posteriores que preguntaste 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. Ninguno de ldd
los dos readelf
responderá a 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 información sobre la versión, pero nada lo exige. Los símbolos pueden tener versiones, y tendrías que hacer mucho en un nivel aún más bajo para nm
verlos.
Respuesta3
Otra forma sería utilizar objdump.
objdump -x "binario" | grep NECESARIO
Esto muestra todas las dependencias necesarias solo para este binario. Muy útil.
Respuesta4
ElOtras respuestaste pierdas un punto importante:
Las bibliotecas compartidas pueden serdirectamentevinculado, oindirectamentevinculado a través de otra lib.
Sólo para eldirectamente vinculado:
objdump --private-headers "${bin}" | grep 'NECESARIO' | cortar --delimiter=' ' --fields=18-
Paratodo:
ldd "${bin}" | cortar --fields=2 | cortar --delimiter='' --fields=1 | rev. | cortar --delimiter='/' --fields=1 | rev. | ordenar --único --versión-ordenar