102.3 - Gestion de bibliotecas compartidas: Comandos clave
ldd - Listar dependencias
Comando Descripcion Ejemplo ldd <ejecutable>Mostrar bibliotecas compartidas requeridas ldd /bin/lsldd -v <ejecutable>Modo verbose con informacion de version ldd -v /usr/bin/sshldd -u <ejecutable>Mostrar dependencias no utilizadas ldd -u /bin/ls
Alternativas seguras a ldd
Comando Descripcion objdump -p <ejecutable> | grep NEEDEDListar dependencias sin ejecutar el binario readelf -d <ejecutable> | grep NEEDEDListar dependencias de forma segura
ldconfig - Gestionar cache de bibliotecas
Comando Descripcion Ejemplo ldconfigActualizar cache y crear enlaces simbolicos sudo ldconfigldconfig -pMostrar todas las bibliotecas en cache ldconfig -pldconfig -p | grep <nombre>Buscar biblioteca en cache ldconfig -p | grep libsslldconfig -vModo verbose (muestra lo que hace) sudo ldconfig -vldconfig -NNo reconstruir cache (solo enlaces) sudo ldconfig -Nldconfig <directorio>Procesar solo un directorio sudo ldconfig /opt/lib
Archivos de configuracion
Archivo Funcion /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
Accion Comando Establecer temporalmente export LD_LIBRARY_PATH=/opt/libAnadir a la ruta existente export LD_LIBRARY_PATH=/opt/lib:$LD_LIBRARY_PATHUsar para un solo comando LD_LIBRARY_PATH=/opt/lib ./programaVer valor actual echo $LD_LIBRARY_PATH
Directorios estandar de bibliotecas
Directorio Contenido /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
Componente Ejemplo Descripcion liblibPrefijo obligatorio Nombre readlineNombre 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
Archivo Arquitectura /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