Linux error durante la carga de bibliotecas compartidas:no se puede abrir el archivo objeto compartido:No existe el fichero o el directorio

StackOverflow https://stackoverflow.com/questions/480764

Pregunta

El programa es parte de la Xenomai suite de prueba, de la cruz-compilado de PC de Linux en Linux+Xenomai BRAZO conjunto de herramientas.

# 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 yo no noto la 1 en la final fue parte del nombre de archivo.¿Qué significa eso de todos modos?

¿Fue útil?

Solución

Actualizar
Si bien lo que escribo a continuación es cierto 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 el & Quot; -dev & Quot ; versión de ese paquete.


Bueno, no está mintiendo, no hay libpthread_rt.so.1 en esa lista. Probablemente necesite volver a configurarlo y reconstruirlo de modo que dependa de la biblioteca que tenga, o instalar lo que proporcione libpthread_rt.so.

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 eliminar la otra, tendrá un libfoo.so.1.1, y libfoo.so.1 y libfoo.so ahora apuntarán a la nueva, pero cualquier código que requiera esa versión exacta puede use 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 su caso, podría salirse con la simulación de <=> a <=>. Sin embargo, no hay garantías de que no romperá su código y se comerá sus cenas de TV.

Otros consejos

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) Encuentre dónde se ubica la biblioteca si no la conoce.

sudo find / -name the_name_of_the_file.so

(2) Verifique 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 está path.so.something. Entonces, si /my_library/path.so.something está en <=> 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 un par de soluciones que usted puede intentar:

ldconfig

Como AbiusX señaló:Si solo tienes ahora instalado la biblioteca, usted puede simplemente debe ejecutar ldconfig.

sudo ldconfig

ldconfig crea los vínculos necesarios y caché a la más reciente las bibliotecas compartidas 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 el gestor de paquetes se hará cargo de este cuando se instala una nueva biblioteca, pero no siempre, y no duele para ejecutar ldconfig incluso si ese no es su problema.

Dev paquete o versión incorrecta

Si eso no funciona, también me echa un vistazo Pablo sugerencia y buscar un "-dev" la versión de la biblioteca.Muchas bibliotecas están divididos en dev y no paquetes-dev.Usted puede usar este comando para buscarlo:

apt-cache search <libraryname>

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

Ubicación de la biblioteca

Si está seguro de que el paquete está instalado, y ldconfig no encontrarlo, sólo puede estar en un no estándar de directorio.De forma predeterminada, ldconfig se ve en /lib, /usr/lib, y los directorios listados en /etc/ld.so.conf y $LD_LIBRARY_PATH.Si la biblioteca está en otro lugar, puede agregar el directorio en su propia línea en /etc/ld.so.conf, anexar la biblioteca de la ruta de acceso a $LD_LIBRARY_PATH, o mover la biblioteca en /usr/lib.A continuación, ejecute ldconfig.

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

sudo find / -iname *libraryname*.so*

(Reemplazar libraryname con el nombre de la biblioteca)

Si van a la $LD_LIBRARY_PATH la ruta, te quiero poner en su ~/.bashrc archivo para que se ejecute cada vez que inicie sesión en:

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

Tuve el error similar, podría resolverlo dando,

sudo ldconfig -v

Espero que esto ayude.

Debe asegurarse de especificar la ruta de la biblioteca durante vinculación cuando 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 que está en / usr / lib /

Espero que te ayude.

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

Para eso, consulte Sun Linker and Libraries Guide

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

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

LD_LIBRARY_PATH=path_to_your_library

¡Funciona!

cd /home/<user_name>/
sudo vi .bash_profile

agregue estas líneas al final

LD_LIBRARY_PATH=/usr/local/lib:<any other paths you want>
export LD_LIBRARY_PATH

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

Si sabe que libpthread_rt.so.1 es lo mismo que libpthread_rt.so, puede crear un enlace simbólico:

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.

Tuve un error similar y no se solucionó al dar LD_LIBRARY_PATH en ~ / .bashrc. Lo que resolvió mi problema es agregando el archivo .conf y cargándolo. Ir a la terminal y estar en su.

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

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

ldconfig

Verifique su nueva ruta de biblioteca:

ldconfig -v | less

Si esto muestra los archivos de su biblioteca, entonces está listo para comenzar.

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

  1. En Eclipse:
      

    Ejecutar como - > Ejecutar configuraciones - & Gt; Medio ambiente

  2. Establecer la ruta

    LD_LIBRARY_PATH=/my_lib_directory_path
    

intente instalar sudo lib32z1

  

sudo apt-get install lib32z1

Todo lo que tenía que hacer era ejecutar:

sudo apt-get install libfontconfig1

Yo estaba en la carpeta que se encuentra en /usr/lib/x86_64-linux-gnu y funcionó perfectamente.

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.

El error se produce cuando el sistema no puede referirse a la biblioteca del archivo mencionado.Tome los pasos siguientes:

  1. Ejecución locate libpthread_rt.so.1 aparecerá la ruta de todos los archivos con ese nombre.Supongamos que un camino es /home/user/loc.
  2. Copia la ruta de acceso y ejecutar cd home/USERNAME.Reemplazar el nombre de USUARIO con el nombre de la corriente activa del usuario con el que desea ejecutar el archivo.
  3. Ejecutar vi .bash_profile y al final de la LD_LIBRARY_PATH parámetro, justo antes de ., añadir la línea /lib://home/usr/loc:..Guardar el archivo.
  4. Cerca de la terminal y reiniciar la aplicación.Se debe ejecutar.

Recibí este error y creo que es la misma razón tuya

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

Prueba esto. Solucionar permisos en archivos:

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

& # 8220; sudo su & # 8221; para obtener permisos en su sistema de archivos.

Recibí este error y creo que es la misma razón tuya

  

error al cargar bibliotecas compartidas: libnw.so: no se puede abrir compartido   archivo de objeto: No existe tal archivo o directorio

Prueba esto. Corregir permisos en archivos:

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

problema similar encontrado aquí: https://bugzilla.redhat.com/show_bug. cgi? id = 1456202 He probado la solución mencionada y realmente funciona.

Las soluciones en las preguntas anteriores pueden funcionar. Pero creo que esta es una manera fácil de solucionarlo. Intente reinstalar el paquete libwbclient en fedora:

dnf reinstall libwbclient
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top