GNU/Linux >> Tutoriales Linux >  >> Linux

Buscar bibliotecas contra las que se vinculó un binario

Tryldd 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)

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 puede abrir cosas dinámicamente 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 por respuestas posteriores que estabas preguntando sobre OSX, pero quiero agregar a mi respuesta sobre las herramientas de Linux:

Una cosa que olvidé mencionar, hace bastante tiempo; usted preguntó acerca de las versiones. Ninguno ldd ni readelf responderá a la pregunta "qué versión". Le dirá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 estar versionados, y tendrías que esforzarte mucho en un nivel aún más bajo con nm para ver estos,


Otra forma sería usar objdump.

objdump -x "binario" | grep NECESARIO

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


Linux
  1. ¿Cómo averiguar las cargas ejecutables de las bibliotecas dinámicas cuando se ejecutan?

  2. Linux:¿cómo probar si un binario de Linux se compiló como código independiente de la posición?

  3. Cómo saber cuándo se creó el Spfile en un servidor Linux

  4. Compatibilidad binaria de la distribución de Linux

  5. Cómo averiguar qué archivo está en un sector en particular

5 formas de encontrar una descripción y ubicación de un "comando binario" en el sistema de archivos

¿Las DLL (vinculadas estáticamente) usan un montón diferente al del programa principal?

¿Cómo se especifica la ubicación de las bibliotecas en un binario? (Linux)

enumerar/buscar todos los archivos normales en todos los subdirectorios, excepto los archivos binarios

¿Cómo puedo saber cuánto tiempo hace que se instaló un sistema Linux?

Averigüe si la biblioteca está en la ruta