大家好:我在Windows 7上与JNI一起练习。 我的目标是在Eclipse控制台上打印一个" Hello world"使用C&#API的消息。
我一直在
Exception in thread "main" java.lang.UnsatisfiedLinkError: nativeStuff.HelloJNI.sayHello()V
at nativeStuff.HelloJNI.sayHello(Native Method)
at main.Init.main(Init.java:17)
在我的项目中Properties
- > Libraries
- > jre8
- > Native Library Location
- > Edit
- > Workspace
我将nativeStuff
设置为所选文件夹,因为库hello.dll
就在那里,但我一直收到有关UnsatisfiedLinkError
的错误。
这是源树:
src(folder):
main(package):
Init.java
nativeStuff(package):
HelloJNI.java
hello.dll
HelloJNI.c
nativeStuff_HelloJNI.h
Init.java:
public class Init {
public static void main(String[] args) {
System.out.println("Begin");
new HelloJNI().sayHello(); // from the exception above
}
}
HelloJNI.java:
public class HelloJNI {
static {
try {
System.loadLibrary("hello");
} catch(UnsatisfiedLinkError u) { // always from the exception above
u.printStackTrace();
} catch(SecurityException s) {
s.printStackTrace();
}
}
public native void sayHello();
}
nativeStuff_HelloJNI.h:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class nativeStuff_HelloJNI */
#ifndef _Included_nativeStuff_HelloJNI
#define _Included_nativeStuff_HelloJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: nativeStuff_HelloJNI
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_nativeStuff_HelloJNI_sayHello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
和HelloJNI.c:
#include "jni.h"
#include <stdio.h>
#include "nativeStuff_HelloJNI.h"
// Implementation of native method sayHello() of HelloJNI class
JNIEXPORT void JNICALL Java_HelloJNI_sayHello(JNIEnv *env, jobject thisObj) {
printf("Hello World!\n");
return;
}
[编辑] :这些是我为获取文件而输入的命令......
javac HelloJNI.java
javah -jni nativeStuff.HelloJNI
gcc -Wl,--add-stdcall-alias -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32" -shared -o hello.dll HelloJNI.c
答案 0 :(得分:1)
System.loadLibrary
适用于系统库,系统库通常位于jre子文件夹中。如果要加载示例中的本地库,请改为使用:
System.load("/path/to/your/lib.ext")
请参阅jre javadoc
最后,错误是:函数名称必须是合格的:Java_nativeCode_HelloJNI_sayHello
而不是{。1}} .h和.c