Saltar al contenido

Error de Linux al cargar bibliotecas compartidas: no se puede abrir el archivo de objeto compartido: no existe tal archivo o directorio

Luego de de esta prolongada recopilación de datos solucionamos este contratiempo que suelen tener ciertos lectores. Te brindamos la solución y deseamos resultarte de mucha apoyo.

Solución:

Tu biblioteca es una biblioteca dinámica. Debe indicarle al sistema operativo dónde puede ubicarlo en tiempo de ejecución.

Para hacerlo, tendremos que seguir esos sencillos pasos:

(1) Encuentre dónde está ubicada la biblioteca si no la conoce.

sudo find / -name the_name_of_the_file.so

(2) Compruebe la existencia de la variable de entorno de ruta de biblioteca dinámica (LD_LIBRARY_PATH)

$ echo $LD_LIBRARY_PATH

si no hay nada que mostrar, agregue un valor de ruta predeterminado (o no si lo desea)

$ LD_LIBRARY_PATH=/usr/local/lib

(3) Agregamos la ruta deseada, la exportamos y probamos la aplicación.

Tenga en cuenta que la ruta debe ser el directorio donde path.so.something es. Así que si path.so.something es en /my_library/path.so.something debería ser :

$ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/my_library/
$ export LD_LIBRARY_PATH
$ ./my_app

fuente: http://www.gnu.org/software/gsl/manual/html_node/Shared-Libraries.html

Aquí hay algunas soluciones que puede probar:

ldconfig

Como señaló AbiusX: si acaba de instalar la biblioteca, es posible que simplemente necesite ejecutar ldconfig.

sudo ldconfig

ldconfig crea los enlaces necesarios y la caché a las bibliotecas compartidas más recientes que se encuentran en los directorios especificados en la línea de comando, en el archivo /etc/ld.so.conf y en los directorios de confianza (/ lib y / usr / lib).

Por lo general, su administrador de paquetes se encargará de esto cuando instale una nueva biblioteca, pero no siempre, y no estará de más ejecutar ldconfig incluso si ese no es su problema.

Paquete de desarrollo o versión incorrecta

Si eso no funciona, también revisaría la sugerencia de Paul y buscaría una versión “-dev” de la biblioteca. Muchas bibliotecas se dividen en paquetes dev y no dev. Puedes usar este comando para buscarlo:

apt-cache search 

Esto también puede ayudar si simplemente tiene instalada la versión incorrecta de la biblioteca. Algunas bibliotecas se publican en diferentes versiones simultáneamente, por ejemplo, Python.

Ubicación de la biblioteca

Si está seguro de que está instalado el paquete correcto y ldconfig no lo encontró, es posible que esté en un directorio no estándar. Por defecto, ldconfig busca en /lib, /usr/liby directorios listados en /etc/ld.so.conf y $LD_LIBRARY_PATH. Si su biblioteca está en otro lugar, puede agregar el directorio en su propia línea en /etc/ld.so.conf, agregue la ruta de la biblioteca a $LD_LIBRARY_PATHo mueva la biblioteca a /usr/lib. Entonces corre ldconfig.

Para saber dónde está la biblioteca, intente esto:

sudo find / -iname *libraryname*.so*

(Reemplazar libraryname con el nombre de tu biblioteca)

Si vas al $LD_LIBRARY_PATH ruta, querrás poner eso en tu ~/.bashrc archivo para que se ejecute cada vez que inicie sesión:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/library

Actualizar

Mientras que lo que escribo a continuación es true Como respuesta general sobre las bibliotecas compartidas, creo que la causa más frecuente de este tipo de mensajes es porque ha instalado un paquete, pero no ha instalado la versión “-dev” de ese paquete.


Bueno, no está mintiendo, no hay libpthread_rt.so.1 en ese listado. Probablemente necesite reconfigurarlo y reconstruirlo para que dependa de la biblioteca que tenga, o instalar lo que le proporcione libpthread_rt.so.1.

Generalmente, los números después de .so son números de versión, y a menudo encontrará que son enlaces simbólicos entre sí, por lo que si tiene la versión 1.1 de libfoo.so, tendrá un archivo real libfoo.so.1.0, y enlaces simbólicos foo.so y foo.so.1 apuntando a libfoo.so.1.0. Y si instala la versión 1.1 sin quitar la otra, tendrá libfoo.so.1.1, y libfoo.so.1 y libfoo.so ahora apuntarán al nuevo, pero cualquier código que requiera esa versión exacta puede utilice el archivo libfoo.so.1.0. El código que solo se basa en la API de la versión 1, pero no le importa si es 1.0 o 1.1 especificará libfoo.so.1. Como orip señaló en los comentarios, esto se explica bien en http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html.

En tu caso, tu podría salirse con la suya simbolizando libpthread_rt.so.1 a libpthread_rt.so. Sin embargo, no hay garantías de que no romperá su código y comerá sus cenas de TV.

valoraciones y comentarios

Eres capaz de asistir nuestro análisis dejando un comentario y dejando una puntuación te damos las gracias.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *