Watch at EaseHistorias. Respuestas. Perspectiva.

Computación · GUÍA PRÁCTICA

Linux dice “cannot open shared object file”: demuestra qué buscó el cargador antes de cambiar bibliotecas

El .so nombrado puede faltar, quedar oculto por el servicio real, usar otra caché o ser incompatible con la ABI. Crea un registro del cargador antes de ejecutar ldconfig, exportar LD_LIBRARY_PATH, copiar archivos o crear enlaces.

Diagrama del cargador con DT_NEEDED, orden de búsqueda, caché, rutas y candidato ELF
Ilustración: demuestra nombre, contexto y ABI antes de cambiar el sistema. Watch at Ease

“Error while loading shared libraries” solo indica que el cargador no pudo satisfacer una dependencia; no demuestra que no exista un archivo de nombre parecido. El ejecutable real, intérprete ELF, DT_NEEDED, RUNPATH/RPATH, entorno, caché, directorios, arquitectura y espacio de servicio o contenedor determinan el resultado.

La reparación es una decisión de propiedad. Si la dependencia pertenece a un paquete, repara el paquete compatible; si pertenece a tu compilación, corrige SONAME y despliegue. No cambies rutas globales ni inventes enlaces entre versiones mayores sin demostrar compatibilidad.

1. Captura el ejecutable y nombre solicitados

Registra comando, ruta, usuario, servicio/contenedor, directorio y error. Resuelve wrappers y enlaces para que readelf inspeccione el ELF que llega a execve.

Usa readelf -dW para DT_NEEDED y RPATH/RUNPATH, y readelf -lW o file para intérprete y plataforma.

2. Reconstruye la búsqueda del cargador

Desde el mismo contexto usa interpreter --list o LD_DEBUG=libs cuando proceda y registra directorios, primer candidato o rechazo.

Compara rutas incrustadas, LD_LIBRARY_PATH real, caché y directorios predeterminados. systemd, contenedor, sudo o set-user-ID pueden tener otro entorno.

3. Valida candidato y propietario

Inspecciona encabezado y sección dinámica de cada candidato. Compara clase, máquina, endianidad, SONAME y símbolos; un enlace no vuelve compatibles dos ABI.

Identifica propiedad con base de paquetes, manifiesto del proveedor o artefactos y separa paquete eliminado, caché vieja, capa incompleta, arquitectura errónea y runtime omitido.

4. Repara con alcance mínimo y prueba un inicio limpio

Prefiere reinstalar o recompilar el componente propietario con despliegue correcto. Para apps propias usa RUNPATH deliberado o configuración documentada.

Quita anulaciones temporales y repite desde el servicio/contenedor original. Registra objeto resuelto, inicio, arquitectura, versión y la función que usa la dependencia.

Diagrama que lleva el SONAME solicitado al paquete o build propietario
Ilustración: repara al propietario del contrato y prueba sin anulación global. Watch at Ease