Ho visto questa domanda qui, ho provato le correzioni proposte, ma finora non ho avuto successo. Ho un bel po 'di esperienza in Java, ma JNI è molto tempo fa, non l'ho mai fatto su Linux ...Problema JNI su Linux: impossibile aprire il file oggetto condiviso
Sto provando a ottenere una semplice app HelloWorld JNI in esecuzione su Linux.
File di piccole 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");
}
}
Piccolo file 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;
}
compilato il file C da:
gcc -shared -Wall -fPIC HelloWorld.c -I/usr/lib/gcc/x86_64-redhat-linux/3.4.3/include/ -o libHelloWorld.so
eseguire l'applicazione da:
java HelloWorld
o
java -Djava.library.path=/home/nxp40954/jnitesting/. HelloWorld
Ma non va bene, ottenendo un:
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
Strano, perché non v'è in realtà un file /home/nxp40954/jnitesting/libHelloWorld.so
.
Qualcuno ha un indizio?
Sì, so che le librerie dovrebbero seguire il percorso definito da LD_LIBRARY_PATH, "." è anche lì, e anche usando -Djava.library.path =/home/nxp40954/jnitesting definisco esplicitamente dove si trova libHelloWorld.so, ma ottengo ancora questo errore "Nessun file o directory". – Vlemmix
Ho compilato il tuo codice e funziona per me. Puoi provare a fare tutto in una directory e usare "." ? A proposito, che java stai usando? OS OS? –