He visto esta pregunta aquí, intenté las soluciones propuestas, pero hasta ahora no he tenido éxito. Tengo bastante experiencia en Java, pero JNI hace mucho tiempo, nunca lo hizo en Linux ...Problema de JNI en Linux: no se puede abrir el archivo de objeto compartido
Estoy tratando de ejecutar una aplicación HelloWorld JNI simple en Linux.
pequeño archivo de java:
class HelloWorld {
private native void print();
public static void main(String[] args){
new HelloWorld().print();
}
static {
System.out.println(System.getProperty("java.library.path"));
System.loadLibrary("HelloWorld");
}
}
pequeño archivo C:
#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"
JNIEXPORT void JNICALL
Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
printf("Hello World!\n");
return;
}
compiló el archivo C por:
gcc -shared -Wall -fPIC HelloWorld.c -I/usr/lib/gcc/x86_64-redhat-linux/3.4.3/include/ -o libHelloWorld.so
ejecutar la aplicación por:
java HelloWorld
o
java -Djava.library.path=/home/nxp40954/jnitesting/. HelloWorld
Pero no es bueno, para conseguir una:
Exception in thread "main" java.lang.UnsatisfiedLinkError: /home/nxp40954/jnitesting/libHelloWorld.so: /home/nxp40954/jnitesting/libHelloWorld.so: cannot open shared object file: No such file or directory
extraño, porque no es en realidad un archivo /home/nxp40954/jnitesting/libHelloWorld.so
.
¿Alguien tiene una pista?
Sí, sé que libs debería seguir la ruta definida por LD_LIBRARY_PATH, "." también está ahí, e incluso al usar el archivo -Djava.library.path =/home/nxp40954/jnitesting defino explícitamente dónde se encuentra el libHelloWorld.so, pero sigo teniendo el error "No existe ese archivo o directorio". – Vlemmix
He compilado tu código y funciona para mí. ¿Puedes intentar hacerlo todo en un directorio y usar "." ? Por cierto, ¿qué java estás usando? Waht OS? –