实例
(1)创建项目
在Eclipse中创建一个java项目,新建HelloWorld类,代码如下:
package Hello;
public class HelloWorld {
static {
System.loadLibrary("HelloWorld");
}
private native void print();
public static void main(String args[]) {
new HelloWorld().print();
}
}
项目结构图:
(2)编译java文件:
》打开指令终端,进入/src路径,编译HelloWorld.java文件
javac Hello/HelloWorld.java
》编译头文件
javah -classpath . -jni Hello.HelloWorld
注:-classpath . 表示从Hello中导入HelloWorld .class文件;-jni 表示生成JNI-style 的头文件
注意编译路径
》src目录下面就会生成一个Hello_HelloWorld.h的头文件,将文件移到Hell文件夹下;头文件内容不能修改!!!!!
(3)实现Hello_HelloWorld.h头文件中的方法,生成可供java调用的动态链接库
》创建HelloWorld.c文件
#include
#include
#include "Hello_HelloWorld.h"
JNIEXPORT void JNICALL Java_Hello_HelloWorld_print
(JNIEnv *env, jobject obj)
{
printf("HelloWorld JNI!\n");
return;
}
》在src路径下运行
gcc -shared -I $JAVA_HOME/include/ -I$JAVA_HOME/include/linux/ Hello/HelloWorld.c -o Hello/libHelloWorld.so
注:-shared指的是编译共享库,后缀名为.so,-I是添加搜索目录;$JAVA_HOME替换成jdk的路径。
最终生成文件:
(4)eclipse调用
将动态库的搜索路径添加到项目中,Eclipse中:
Project->properties->Java Build Path->Source,设置Native Library Location。然后直接运行HelloWorld.java文件。结果如下图:
这里的c文件已经被我修改,正确显示应该为"HelloWorld JNI!”