son que librerias estaticas dinamicas crear como linux shared-libraries file-not-found xenomai

linux - que - como crear librerias dinamicas en java



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

El programa forma parte del conjunto de pruebas de Xenomai, compilado de forma cruzada desde la PC de Linux a la cadena de herramientas ARM de Linux + Xenomai.

# 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

Edición: OK. No noté que el .1 al final era parte del nombre del archivo. ¿Qué significa eso, de todos modos?


Aquí hay algunas soluciones que puedes probar:

ldconfig

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

sudo ldconfig

ldconfig crea los enlaces y la memoria caché necesarios para las bibliotecas compartidas más recientes que se encuentran en los directorios especificados en la línea de comandos, 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 le 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 Paul y buscaría una versión "-dev" de la biblioteca. Muchas bibliotecas se dividen en paquetes dev y non-dev. Puedes usar este comando para buscarlo:

apt-cache search <libraryname>

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 el paquete correcto está instalado, y ldconfig no lo encontró, puede que esté en un directorio no estándar. De forma predeterminada, ldconfig busca en /lib , /usr/lib , y los 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 , agregar la ruta de la biblioteca a $LD_LIBRARY_PATH o mover la biblioteca a /usr/lib . A continuación, ejecute ldconfig .

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

sudo find / -iname *libraryname*.so*

(Reemplace el nombre de la biblioteca con el nombre de su biblioteca)

Si va a la ruta $LD_LIBRARY_PATH , querrá poner eso en su archivo ~/.bashrc para que se ejecute cada vez que inicie sesión:

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


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

Espero que te ayude.


El error se produce porque el sistema no puede referirse al archivo de biblioteca mencionado. Siga los siguientes pasos:

  1. La ejecución de locate libpthread_rt.so.1 mostrará una lista de la ruta de todos los archivos con ese nombre. Supongamos que una ruta es /home/user/loc .
  2. Copia la ruta y ejecuta 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 . , agregue la línea /lib://home/usr/loc:. . Guarda el archivo.
  4. Cierre el terminal y reinicie la aplicación. Debería correr.

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

LD_LIBRARY_PATH=path_to_your_library

¡Funciona!


La página de referencia de linux.org explica la mecánica, pero no explica la motivación detrás de ella :-(

Para eso, vea Sun Linker y la Guía de Bibliotecas.

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


Otra posible solución en función de su situación.

Si sabe que libpthread_rt.so.1 es lo mismo que libpthread_rt.so, entonces 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 lo que apunta.


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

error al cargar bibliotecas compartidas: libnw.so: no se puede abrir el archivo de objeto compartido: 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)


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. Corregir permisos en 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.


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.


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.


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

Para hacerlo, tendremos que hacer esos sencillos pasos:

(1) Encuentra dónde está ubicada la biblioteca si no la conoces.

sudo find / -name the_name_of_the_file.so

(2) Compruebe la existencia de la variable de entorno de la ruta de la 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) Añadimos la ruta deseada, la exportamos y probamos la aplicación.

Tenga en cuenta que la ruta debe ser el directorio donde se encuentra la path.so.something . Entonces, 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


Tuve el error similar, pude resolverlo dando,

sudo ldconfig -v

Espero que esto ayude.


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. Establecer el camino

    LD_LIBRARY_PATH=/my_lib_directory_path


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

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

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

ldconfig

Verifique su nueva ruta de la biblioteca:

ldconfig -v | less

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


intente instalar sudo lib32z1

sudo apt-get install lib32z1


Actualizar
Si bien lo que escribo a continuación es cierto como una respuesta general acerca de 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 esa lista. Probablemente necesite volver a configurarlo y volver a compilarlo para que dependa de la biblioteca que tenga, o instalar lo que 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 los enlaces simbólicos foo.so y foo.so.1 que apuntan 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 usar 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 vinculación de libpthread_rt.so.1 a libpthread_rt.so . Sin embargo, no hay garantías de que no rompa su código y no coma sus cenas de televisión.


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

Añade estas líneas al final.

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