Utilice el comando ldd para mostrar las bibliotecas compartidas requeridas por cualquier programa dado – útil para calcular cuando falta una dependencia. El comando también lista las funciones y objetos que faltan.
Sintaxis del comando ldd
Observe la sintaxis correcta del comando ldd para evitar errores:
ldd[OPCIÓN].... ARCHIVO....Utilice uno o más de los comandos ldd disponibles, insertados en el punto [OPTION] del comando anterior:
--help | imprimir esta ayuda y salir
--version | información de la versión de impresión y exit
-d, --data-relocs | reubicación de datos de proceso
-r, --function-relocs | datos de proceso y reubicaciones de funciones
-u, --no utilizado | imprimir dependencias directas no utilizadas
-v, --verbose | imprimir toda la informaciónCómo usar el comando ldd
Ejecute el siguiente comando para obtener más información sobre un programa:
$ldd -v /path/to/program/executableLa salida muestra información de la versión, así como las rutas y direcciones de las bibliotecas compartidas, de esta manera:
$ldd libshared.so
linux-vdso.so.1 => (0x00007fff26ac8000)
libc.so.6 => /lib/libc.so.6 0x0000007ff1df55a000)
/lib64/ld-linux-x86-64.so.2 (0x00007ff1dfafe000)Si el archivo SO no existe, puede encontrar las bibliotecas que faltan usando el siguiente comando:
$ldd -d path/to/programLa salida es similar a la siguiente:
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)Nunca ejecute el comando ldd contra un programa no confiable porque el ldd podría realmente ejecutarlo. En su lugar, utilice una alternativa más segura que muestre sólo las dependencias directas y no todo el árbol de dependencias:
$objdump -p /p /path/to/program | grep NEEDCómo encontrar la ruta a una aplicación
Debe proporcionar la ruta completa a una aplicación si desea encontrar sus dependencias con ldd, lo que puede hacer de varias maneras.
Por ejemplo, así es como encontrarías el camino a Firefox:
$find / -nombre firefoxEl problema con el comando find, sin embargo, es que no sólo listará el ejecutable, sino también todos los lugares donde se encuentra Firefox, como este:
- /etc/skel/.mozilla/firefox
- /Inicio//cache/mozilla/firefox
- /home///.mozilla/firefox
- /usr/bin/Firefox
- /usr/lib/Firefox
- /usr/lib/Firefox/Firefox
Este enfoque es un poco exagerado y puede que necesites usar el comando sudo para elevar tus privilegios, de lo contrario es probable que obtengas muchos errores de denegación de permiso.
En cambio, es mucho más fácil usar el comando whereis para encontrar la ruta de una aplicación:
$whereis firefox
Esta vez la salida podría ser así:
/usr/bin/firefox
/etc/firefox
/usr/lib/firefox
Todo lo que tienes que hacer ahora para encontrar las bibliotecas compartidas para Firefox es escribir el siguiente comando:
$ldd /usr/bin/firefox
La salida del comando será algo así:
linux-vdso.so.1 (0x0000007ffff8364000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007feb9917a000)
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007feb98f76000)
libstdc++.so.6 => /usr/lib/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 es el nombre de la biblioteca y el número hexadecimal es la dirección donde se cargará la biblioteca en la memoria.
Notarás en muchas de las otras líneas que el símbolo => es seguido por un camino. Esta es la ruta al binario físico; el número hexadecimal es la dirección donde se cargará la biblioteca.