Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

262
Vistas
Linux, java.lang.UnsatisfiedLinkError: no hay "archivo de biblioteca" en java.library.path

Estoy tratando de ejecutar un ejemplo JNI simple donde ejecuto una aplicación Java que llama a una función C++ a través de una biblioteca dinámica.

Publicaré los siguientes códigos y comandos de terminal que utilicé.

.Java

 public class Lab{ public native void hello(); static { System.loadLibrary("hello"); } public static void main(String args[]) { new Lab().hello(); } }

obtener .class y archivo de encabezado a través de la terminal

 javac Lab.java javah -jni Lab

archivo hola.cpp

 #include "Lab.h" #include <stdio.h> #include <iostream> JNIEXPORT void JNICALL Java_Lab_hello(JNIEnv *env,jobject jobj) { cout<<"Hello World"<<endl; }

Generando el archivo lib "hello.so":

 gcc -shared -fpic -o hello.so -I/usr/lib/jvm/jdk1.8.0_45/include -I/usr/lib/jvm/jdk1.8.0_45/include/linux hello.cpp

y finalmente ejecuta el archivo:

 java -Djava.library.path=. Lab

y luego me sale el error:

 Exception in thread "main" java.lang.UnsatisfiedLinkError: no hello in java.library.path at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1865) at java.lang.Runtime.loadLibrary0(Runtime.java:870) at java.lang.System.loadLibrary(System.java:1122) at Lab.<clinit>(Lab.java:6)

Sé que hay otras publicaciones con este mismo problema, pero desafortunadamente ninguna de esas soluciones funcionó para mí. Ya probé cosas como:

  • copie el archivo hello.so en "/usr/lib" que se encuentra en la ruta de java lib y déle permisos con chmod;
  • agregue la ruta del archivo hello.so a $LD_LIBRARY_PATH usando export también;
  • agregue la ruta hello.so cuando ejecute el archivo java (java -Djava.library.path="/root/Desktop" Lab);
  • use ldconfig que ni siquiera funcionó.

Necesito usar esto en una aplicación principal, pero solo estaba probando un ejemplo rápido y no pude hacerlo funcionar incluso con todas las soluciones que leí en otras publicaciones.

Gracias.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Otro día de búsqueda a través de Stack y encontré lo que necesitaba aquí . En Linux, los archivos .so lib deben tener el prefijo "lib". Entonces, en mi ejemplo, mi archivo lib debería llamarse libhello.so en lugar de hello.so y todo funciona.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda