Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

256
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!