Credit image

¿Te gusta el diseño web? ¡Echa un vistazo a la documentación de LenguajeCSS.com!

Error while loading shared libraries

En el ámbito de la informática, los programas o aplicaciones son un conjunto de archivos o ficheros (o un simple archivo en ciertos casos) necesarios para poder iniciarse y funcionar.

Entre ese conjunto de archivos, existen algunos que tienen la capacidad de abrirse para comenzar a funcionar por sí solos, estos se llaman ficheros ejecutables o archivos binarios.

En ese conjunto de archivos pueden existir todo tipo de ficheros: documentos (archivos no-ejecutables), binarios (archivos ejecutables) o bibliotecas.

Las bibliotecas, también llamados errónea e históricamente librerías (por traducción incorrecta de library, del inglés), son un tipo de archivo de «apoyo» utilizado por los archivos ejecutables para utilizar información y determinados procedimientos de forma modular (dividido en partes pequeñas) sin repetirlo múltiples veces.

En Windows, estas bibliotecas se identifican con la extensión .DLL (Dynamic Linking Library), mientras que en linux su análogo tiene la extensión .so (Shared object).

Un error que puede ocurrir de forma bastante común al utilizar algún programa que haga uso de bibliotecas inexistentes en linux, es el siguiente:

error while loading shared libraries: libstdc++-libc6.2-2.so.3: cannot open shared object file: No such file or directory

En este ejemplo, la librería compartida que no encuentra es la libstdc++ (Standard C++ Library) en su versión 6.2.2, aunque podría ser cualquier otra librería, como libsepol (Security Enhanced Linux policy):

error while loading shared libraries: libsepol.so.1: cannot open shared object file: No such file or directory

Para solucionar este problema, no tenemos más que hacer algo tan fácil como instalar la biblioteca que necesitamos.

Método 1: Instalar biblioteca vía apt


Es la más fácil y cómoda. Se trata de buscar vía apt la biblioteca que necesitamos.

Actualizamos los repositorios de apt para tenerla al día.

# apt-get update

Buscamos la biblioteca concreta, basta con buscar la primera parte de la misma:

# apt-cache search libsepol
libsepol1 - Security Enhanced Linux policy library for changing policy binaries
libsepol1-dev - Security Enhanced Linux policy library and development files

La búsqueda nos devuelve dos resultados libsepol1 y libsepol1-dev. Los sufijos -dev significan versión de desarrollo (developer), por lo tanto es sólo útil para programadores. En principio, la que nos interesa es la otra, así que la instalamos.

# apt-get install libsepol1

Método 2: Instalar biblioteca vía dpkg


Sin embargo, si intentamos realizar la búsqueda con apt para la librería anterior desde un ubuntu actualizado (8.10 por ejemplo) nos toparemos con los siguientes resultados (entre otros):

# apt-cache search libstdc++
libstdc++5 - The GNU Standard C++ Library v3
libstdc++6 - The GNU Standard C++ Library v3
libstdc++6-4.1-dev - The GNU Standard C++ Library v3 (development files)
libstdc++6-4.2-dev - The GNU Standard C++ Library v3 (development files)
libstdc++6-4.3-dev - The GNU Standard C++ Library v3 (development files)

El problema es que si nos fijamos bien, el error anterior nos lo da en libstdc++-libc6.2-2.so.3. Fijándonos, vemos que la versión no es la misma, por lo tanto la biblioteca de los repositorios no nos va a servir.

Tendremos que buscar el paquete .deb que necesitamos para instalarlo manualmente. En este caso, el paquete que necesitamos es libstdc++2.10-glibc2.2, página donde encontraremos varios mirrors (alternativas en diferentes localización) donde descargar el fichero .deb (por ejemplo, el de Africa).

# wget "http://za.archive.ubuntu.com/ubuntu/pool/universe/g/gcc-2.95/libstdc++2.10-glibc2.2_2.95.4-24_i386.deb"

Una vez descargado, procedemos a instalarlo manualmente con dpkg y el flag de instalación -i.

# dpkg -i libstdc++2.10-glibc2.2_2.95.4-24_i386.deb
Seleccionando el paquete libstdc++2.10-glibc2.2 previamente no seleccionado.
(Leyendo la base de datos ...
19699 ficheros y directorios instalados actualmente.)
Desempaquetando libstdc++2.10-glibc2.2 (de libstdc++2.10-glibc2.2_2.95.4-24_i386.deb) ...
Configurando libstdc++2.10-glibc2.2 (2.95.4-24) ...

Instalado. Una forma menos cómoda, porque tenemos que buscar el paquete por nuestra cuenta, pero que siempre nos puede sacar de un apuro.

En estos ejemplos he utilizado apt y paquetes .deb de distros basadas en debian. Según la distribución de linux, usaremos otros gestores (yum, urpmi, emerge...) o paquetería rpm (redhat, fedora, etc...).

Escrito por Manz, el , en software. Comentarios recibidos: 6.

6 comentarios de lectores
niky45
niky45
1

dos puntualizaciones: 1. las librerias (vale, bibliotecas) -dev, o de desarollo, no son solo para desarrolladores, sino que son necesarias para cuando a uno le toca compilar. 2. y por increible que parezca, hay veces que una libreria no esta en los repos y nos toca compilarla.... Por lo demas, muy buen manual. Aunque he de decir que si hemos instalado via repos (o incluso compilando) es realmente muy dificil que nos de ese tipo de errores. Otra cosa es dpkg, que no instala dependencias, o que algun (...) haya borrado algo

Jorge
Jorge
2

Muchas gracias por una explicación tan buena!

Bruno
Bruno
3

Muy buena la explicacion. Mi problema es que me falta la libreria libsepol y no me deja entrar a ninguna consola por lo que no podria buscarla con el apt-get. Que es lo que hago entonces?

Fabio
Fabio
4

Hola estoy intentado usar un binario de un cliente y el me envia un monton de archivos .so, si ejecuto el binario me indica que no encuentra un .so de los que me envio el cliente, lo coloque en /lib pero me sigue dando el error, como hago para "instalar" estos .so que ya me los dieron listos?

Fabio
Fabio
5

Me respondo solo, luego de colocar los archivos en /user/lib (en mi caso) ejecute: ldconfig -v Y ya reconoce los .so Fuente: http://www.linuxquestions.org/questions/linux-newbie-8/error-while-loading-shared-libraries-612832/

Nacho López
Nacho López
6

No me había dado cuenta que la traducción correcta es nombrar bibliotecas a las libraries. Gracias por tus aportaciones, Manz. Enhorabuena por tu trabajo, te felicito. Un saludo.

  • 1
Publica tu opinión

Si lo deseas, puedes utilizar el siguiente formulario para publicar tu opinión o responder a alguna de las existentes:

Previsualización

Aquí se previsualizará su comentario. Revise que sea correcto antes de publicarlo.