102.3 - Gestion de bibliotecas compartidas: Comandos clave

ldd - Listar dependencias

ComandoDescripcionEjemplo
ldd <ejecutable>Mostrar bibliotecas compartidas requeridasldd /bin/ls
ldd -v <ejecutable>Modo verbose con informacion de versionldd -v /usr/bin/ssh
ldd -u <ejecutable>Mostrar dependencias no utilizadasldd -u /bin/ls

Alternativas seguras a ldd

ComandoDescripcion
objdump -p <ejecutable> | grep NEEDEDListar dependencias sin ejecutar el binario
readelf -d <ejecutable> | grep NEEDEDListar dependencias de forma segura

ldconfig - Gestionar cache de bibliotecas

ComandoDescripcionEjemplo
ldconfigActualizar cache y crear enlaces simbolicossudo ldconfig
ldconfig -pMostrar todas las bibliotecas en cacheldconfig -p
ldconfig -p | grep <nombre>Buscar biblioteca en cacheldconfig -p | grep libssl
ldconfig -vModo verbose (muestra lo que hace)sudo ldconfig -v
ldconfig -NNo reconstruir cache (solo enlaces)sudo ldconfig -N
ldconfig <directorio>Procesar solo un directoriosudo ldconfig /opt/lib

Archivos de configuracion

ArchivoFuncion
/etc/ld.so.confLista de directorios de busqueda de bibliotecas
/etc/ld.so.conf.d/*.confArchivos individuales con rutas adicionales
/etc/ld.so.cacheCache binaria de bibliotecas (generada por ldconfig)

LD_LIBRARY_PATH

AccionComando
Establecer temporalmenteexport LD_LIBRARY_PATH=/opt/lib
Anadir a la ruta existenteexport LD_LIBRARY_PATH=/opt/lib:$LD_LIBRARY_PATH
Usar para un solo comandoLD_LIBRARY_PATH=/opt/lib ./programa
Ver valor actualecho $LD_LIBRARY_PATH

Directorios estandar de bibliotecas

DirectorioContenido
/libBibliotecas esenciales del sistema
/lib64Bibliotecas esenciales de 64 bits
/usr/libBibliotecas del sistema (paquetes)
/usr/lib64Bibliotecas de 64 bits (paquetes)
/usr/local/libBibliotecas compiladas localmente

Convencion de nombres

libNOMBRE.so.MAYOR.MENOR.REVISION
ComponenteEjemploDescripcion
liblibPrefijo obligatorio
NombrereadlineNombre de la biblioteca
.so.soShared Object
Mayor.8Version mayor (incompatible)
Menor.1Version menor (compatible)
Revision.2Correccion de errores

Ejemplo de enlaces simbolicos

libreadline.so       -> libreadline.so.8         (desarrollo)
libreadline.so.8     -> libreadline.so.8.1.2     (soname)
libreadline.so.8.1.2                              (archivo real)

Orden de busqueda de bibliotecas

1. RPATH/RUNPATH (incrustado en el ejecutable)
2. LD_LIBRARY_PATH (variable de entorno)
3. /etc/ld.so.cache (cache generada por ldconfig)
4. /lib y /usr/lib (directorios por defecto)

Flujo para anadir nuevas bibliotecas

# 1. Copiar las bibliotecas al directorio deseado
cp libmiapp.so.1.0.0 /usr/local/lib/
 
# 2. Crear archivo de configuracion
echo "/usr/local/lib" | sudo tee /etc/ld.so.conf.d/local.conf
 
# 3. Actualizar la cache
sudo ldconfig
 
# 4. Verificar
ldconfig -p | grep miapp
ldd /usr/local/bin/miapp

El cargador dinamico

ArchivoArquitectura
/lib64/ld-linux-x86-64.so.264 bits (x86_64)
/lib/ld-linux.so.232 bits (x86)
# Usar el cargador directamente (equivalente a ldd)
/lib64/ld-linux-x86-64.so.2 --list /bin/ls