java.lang.UnsatisfiedLinkError при использовании JNI.java.lang.UnsatisfiedLinkError при использовании JNI на ubuntu
Мои испытания окружающей среды:
Ubuntu 12.04/64-bit
JDK 1.7
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5)
Это мой источник Java:
public class HelloJNI {
static {
//System.loadLibrary("libHelloJNI");
}
private native void sayHello() ;
public static void main(String[] args){
//System.getProperties().list(System.out);
String lib_path = System.getProperty("java.library.path");
System.out.println("java.library.path=" + lib_path);
System.loadLibrary("libHelloJNI");
HelloJNI myJNI = new HelloJNI();
myJNI.sayHello();
}
}
Это мой источник C:
#include <stdio.h>
#include "HelloJNI.h"
JNIEXPORT void JNICALL Java_HelloJNI_sayHello(JNIEnv *env, jobject thisObj)
{
puts("Hello Momo. This is C code.");
return;
}
Это мой Makefile:
JNI_INC=-I"${JAVA_HOME}/include" -I"${JAVA_HOME}/include/linux"
JNI_LIB=libHelloJNI.so
JNI_OUT=$(JNI_LIB) HelloJNI.h HelloJNI.class
CFLAGS= $(JNI_INC) -fPIC -shared
all: $(JNI_OUT)
HelloJNI.h: HelloJNI.class
javah -jni HelloJNI
$(JNI_LIB): HelloJNI.c HelloJNI.h
gcc $(CFLAGS) -o [email protected] HelloJNI.c
HelloJNI.class: HelloJNI.java
javac HelloJNI.java
run:
java HelloJNI
#java -Djava.library.path=. HelloJNI
clean:
rm $(JNI_OUT)
Когда я запустить приложение Java, старая проблема возникает:
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8 java.library.path=.:/home/mancook/cook/work/StSoftware/src/java/StTestJni/tutor01_HelloJNI:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
Exception in thread "main" java.lang.UnsatisfiedLinkError: no libHelloJNI in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1886)
at java.lang.Runtime.loadLibrary0(Runtime.java:849)
at java.lang.System.loadLibrary(System.java:1088)
at HelloJNI.main(HelloJNI.java:22)
make: *** [run] Error 1
Я гугл Интернета для этой проблемы и найти, что это OLD вопрос. Но я НЕ МОЖЕТ найти любой способ исправить мою проблему !! Надеюсь, кто-нибудь может мне помочь. Заранее спасибо.
Не могли бы вы также вставить свой родной файл, 'HelloJNI.c'? Это облегчило бы людям воспроизводить это. –
Вам нужно '-Djava.library.path' фактически включить каталог, содержащий' libHelloJNI.so'. –
#include #include #include "HelloJNI.h" JNIEXPORT недействительными JNICALL Java_HelloJNI_sayHello (JNIEnv * ENV, jobject thisObj) { \t Е ("Привет Момо Это код С."); \t возвращение; } –
mancook