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.

“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.
