Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

280
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda