2013-06-11 55 views
0

我查看過類似問題的stackoverflow,但我發現的解決方案似乎都沒有爲我工作。我在Linux/Ubuntu機器上。我只是在練習JNI,但我得到這個錯誤:Ubuntu的JNI UnsatisfiedLinkError;

Exception in thread "main" java.lang.UnsatisfiedLinkError: nativetest.sayHello(Ljava/lang/String;)Ljava/lang/String; 
at nativetest.sayHello(Native Method) 
at nativetest.main(nativetest.java:8) 

我提供我的.c,.h和java文件。

java文件:

public class nativetest 
{ 
System.loadLibrary("nativetest"); 

public native String sayHello(String s); 

public static void main(String[] argv) 
{ 
String retval = null; 
nativetest nt = new nativetest(); 
retval = nt.sayHello("Hi"); 
System.out.println("Invocation returned " + retval); 
} 
} 

.c文件:

#include "nativetest.h" 
#include <stdio.h> 
#include <jni.h> 
#include <stdlib.h> 

JNIEXPORT jstring JNICALL Java_nativetest_sayHello(JNIEnv *env, jobject thisobject, jstring js) 
{ 
    return js; 
} 

h文件:

/* DO NOT EDIT THIS FILE - it is machine generated */ 
#include <jni.h> 
/* Header for class nativetest */ 

#ifndef _Included_nativetest 
#define _Included_nativetest 
#ifdef __cplusplus 
extern "C" { 
#endif 
/* 
* Class:  nativetest 
* Method: sayHello 
* Signature: (Ljava/lang/String;)Ljava/lang/String; 
*/ 
JNIEXPORT jstring JNICALL Java_nativetest_sayHello 
    (JNIEnv *, jobject, jstring); 

#ifdef __cplusplus 
} 
#endif 
#endif 

我使用這些命令來生成.h文件,編譯/生成.so文件,並運行:

的javac nativetest.java

JAVAH -jni nativetest

GCC --shared -o libnativetest.so -I/usr/lib中/ JVM/JAVA -7-的openjdk-AMD64 /包括-I/usr/lib中/ jvm/java-7 -openjdk-amd64/include/linux nativetest.c

java -Djava.library.path =。 nativetest

我目前在libnativetest.so文件和所有.c,.java和.h文件的目錄中。

任何幫助,將不勝感激。

回答

0

好了,原來調用

System.loadLibrary("nativetest"); 

應該是靜態的:

static{ 
System.loadLibrary("nativetest"); 
} 

我還對使用javac重新編譯犯錯誤。我對Linux非常陌生:)