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


El programa es parte de Xenomai test suite, compilado desde Linux PC en Linux+Xenomai ARM toolchain.

# echo $LD_LIBRARY_PATH                                                                                                                                          
/lib                                                                                                                                                             
# ls /lib                                                                                                                                                        
ld-2.3.3.so         libdl-2.3.3.so      libpthread-0.10.so                                                                                                       
ld-linux.so.2       libdl.so.2          libpthread.so.0                                                                                                          
libc-2.3.3.so       libgcc_s.so         libpthread_rt.so                                                                                                         
libc.so.6           libgcc_s.so.1       libstdc++.so.6                                                                                                           
libcrypt-2.3.3.so   libm-2.3.3.so       libstdc++.so.6.0.9                                                                                                       
libcrypt.so.1       libm.so.6                                                                                                                                    
# ./clocktest                                                                                                                                                    
./clocktest: error while loading shared libraries: libpthread_rt.so.1: cannot open shared object file: No such file or directory                                 

Editar: OK No me di cuenta de la.1 al final era parte del nombre del archivo. ¿Qué significa eso?

Author: zaratustra, 2009-01-26

17 answers

Actualización
Si bien lo que escribo a continuación es cierto como una respuesta general sobre las bibliotecas compartidas, creo que la causa más frecuente de este tipo de mensaje es porque ha instalado un paquete, pero no ha instalado la versión "-dev" de ese paquete.


Bueno, no es mentira - 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 proporcione libpthread_rt.so.1.

Generalmente, los números después de el .así son los números de versión, y usted encontrará a menudo que son enlaces simbólicos a cada uno de los otros, así que si usted tiene la versión 1.1 de libfoo.así, tendrás un archivo real libfoo.así.1.0, enlaces simbólicos y foo.así y foo.así.1 apunta a la libfoo.así.1.0. Y si instala la versión 1.1 sin quitar el otro, vas a tener un libfoo.así.1.1, y libfoo.así.1 y libfoo.así que se apuntan ahora a una nueva, pero cualquier código que requiere que versión exacta puede utilizar el libfoo.así.1.0 archivo. Código que solo se basa en la versión 1 API, 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 su caso, podría salirse con la suya con el enlace simbólico libpthread_rt.so.1 a libpthread_rt.so. Sin embargo, no hay garantías de que no rompa su código y coma sus cenas de televisión.

 105
Author: Paul Tomblin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-22 08:09:50

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

Para hacerlo, tendremos que hacer esos sencillos pasos:

(1 ) Encuentra dónde se encuentra la biblioteca si no la conoces.

sudo find / -name the_name_of_the_file.so

(2) Comprobar la existencia de la variable de entorno dynamic library path(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) Añadimos el camino del deseo, exportarlo y probar la aplicación.

Tenga en cuenta que la ruta debe ser el directorio donde está path.so.something. Así que si path.so.something está 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

 229
Author: XOR,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-11 15:50:21

Aquí hay algunas soluciones que puede probar:

Ldconfig

Como señaló AbiusX: Si acaba de instalar la biblioteca, puede que simplemente necesite ejecutar ldconfig.

sudo ldconfig

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

Normalmente su paquete manager se encargará de esto cuando instale una nueva biblioteca, pero no siempre, y no hará daño 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 Pablo y buscaría una versión "-dev" de la biblioteca. Muchas bibliotecas están divididas en paquetes dev y no-dev. Puedes usar este comando para buscarlo:

apt-cache search <libraryname>

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

Ubicación de la biblioteca

Si está seguro de que el paquete correcto está instalado, y ldconfig no lo encontró, puede estar en un directorio no estándar. Por defecto, ldconfig busca /lib, /usr/lib, y 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, anexar la ruta de la biblioteca a $LD_LIBRARY_PATH, o mueva la biblioteca a /usr/lib. A continuación, ejecute ldconfig.

Para averiguar dónde está la biblioteca, pruebe esto:

sudo find / -iname *libraryname*.so*

(Reemplace libraryname con el nombre de su biblioteca)

Si vas por la ruta $LD_LIBRARY_PATH, querrás ponerla en tu archivo ~/.bashrc para que se ejecute cada vez que inicies sesión:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/library
 110
Author: amo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:47:31

Tuve el error similar, pude resolverlo dando,

sudo ldconfig -v

Espero que esto ayude.

 48
Author: Bithin Alangot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-12 05:50:30

Debe asegurarse de especificar la ruta de acceso de la biblioteca durante enlazar cuando se compila su .archivo c:

Gcc-I / usr / local / include xxx. c-o xxx-L / usr / local / lib - Wl, - R/usr/local / lib

La parte-Wl, - R le dice al binario resultante que también busque la biblioteca en /usr / local /lib en tiempo de ejecución antes de intentar usar el de/usr/lib /

Espero que te ayude.

 18
Author: TaoCHEN92,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-23 16:29:42

El linux.org la página de referencia explica la mecánica, pero no explica ninguna de las motivaciones detrás de ella: - (

Para eso, ver Sun Linker y Guía de Bibliotecas

Además, tenga en cuenta que el "control de versiones externo" es en gran medida obsoleto en Linux, porque el control de versiones de símbolos (una extensión de GNU) le permite tener varias versiones incompatibles de la misma función para estar presentes en una sola biblioteca. Esta extensión permitió a glibc tener la misma versión externa: libc.so.6 para el últimos 10 años.

 11
Author: Employed Russian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-26 13:31:53

Intente agregar LD_LIBRARY_PATH, que indica rutas de búsqueda, a su archivo ~/.bashrc

LD_LIBRARY_PATH=path_to_your_library

Funciona!

 10
Author: Ankit Marothi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-09 17:24:17
cd /home/<user_name>/
sudo vi .bash_profile

Añadir estas líneas al final

LD_LIBRARY_PATH=/usr/local/lib:<any other paths you want>
export LD_LIBRARY_PATH
 7
Author: singingsingh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-29 18:54:53

Otra posible solución dependiendo de su situación.

Si sabes que libpthread_rt. so. 1 es lo mismo que libpthread_rt.so a continuación, puede crear un enlace simbólico mediante:

ln -s /lib/libpthread_rt.so /lib/libpthread_rt.so.1

Entonces ls -l /lib ahora debería mostrar el enlace simbólico y a qué apunta.

 4
Author: ALM865,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-06 05:00:58

Todo lo que tenía que hacer era correr:

sudo apt-get install libfontconfig1

Estaba en la carpeta ubicada en /usr/lib/x86_64-linux-gnu y funcionó perfectamente.

 2
Author: jonny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-16 13:56:39

Si está ejecutando su aplicación en Microsoft Windows, la ruta a las bibliotecas dinámicas (.dll) debe definirse en la variable de entorno PATH.

Si está ejecutando su aplicación en UNIX, la ruta a sus bibliotecas dinámicas (.so) debe definirse en la variable de entorno LD_LIBRARY_PATH.

 2
Author: Rubens Gomes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-27 12:33:35

Tuve un error similar y no se solucionó dando LD_LIBRARY_PATH en ~/.bashrc . Lo que resolvió mi problema es añadiendo .conf archivo y cargarlo. Ir a terminal y be en su.

gedit /etc/ld.so.conf.d/myapp.conf

Agregue la ruta de su biblioteca en este archivo y guárdela.(eg: / usr / local / lib). Debe ejecutar el siguiente comando para activar path:

ldconfig

Verifique La Nueva Ruta de La Biblioteca:

ldconfig -v | less

Si esto muestra los archivos de la biblioteca, entonces está listo.

 2
Author: Anand Paul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-03 07:44:30

Intente instalar sudo lib32z1

Sudo apt-get install lib32z1

 1
Author: zajac.m2,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-07 14:34:16

Tuve este error al ejecutar mi aplicación con Eclipse CDT en Linux x86. Para arreglar esto:

  1. En Eclipse: Ejecutar como > Ejecutar configuraciones > Entorno
  2. LD_LIBRARY_PATH = / my_lib_directory_path
 1
Author: user1283704,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-31 16:01:12

El error se produce porque el sistema no puede hacer referencia al archivo de biblioteca mencionado. Tome las siguientes medidas:

  1. Ejecutando locate libpthread_rt.so.1 listará la ruta de todos los archivos con ese nombre. Supongamos que un camino es /home/user/loc.
  2. Copie la ruta y ejecute cd home/USERNAME. Reemplace USERNAME con el nombre del usuario activo actual con el que desea ejecutar el archivo.
  3. Ejecute vi .bash_profile y al final del parámetro LD_LIBRARY_PATH, justo antes de ., agregue la línea /lib://home/usr/loc:.. Guarde el archivo.
  4. Cerrar terminal y reinicie la aplicación. Debería funcionar.
 1
Author: vipin nair,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-19 17:45:29

Tengo este error y creo que es la misma razón de la suya

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

Prueba esto. Se corrigen los permisos en los archivos:

cd /opt/Popcorn (or wherever it is) 
chmod -R 555 * (755 if not ok) 
chown -R root:root *

"sudo su" para obtener permisos en su sistema de archivos.

 0
Author: Mohamad Osama,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-07 09:36:02

Tengo este error y creo que es la misma razón de la suya

Error al cargar bibliotecas compartidas: libnw.so: no se puede abrir compartido archivo objeto: No hay tal archivo o directorio

Prueba esto. Fijar permisos en archivos:

cd /opt/Popcorn (or wherever it is) 
chmod -R 555 * (755 if not ok) 
 0
Author: Salmi Ahmed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-19 18:02:54