第一步:新建好这些路径 mkdir -p /src/com/magc/jni
第二步建立java文件:
vim src/com/magc/jni/HelloWorld.java
package com.magc.jni;
public class HelloWorld{
static {
System.loadLibrary("Hello");
}
public native void DisplayHello();
public static void main(String[] args){
new HelloWorld().DisplayHello();
}
}
第三步:计入src目录
命令:javac ./com/magc/jni/HelloWorld.java
在该HelloWorld.java所在目录下生成HelloWorld.class
然后使用javah生成头文件,
命令:javah -jni com.magc.jni.HelloWorld
在当前目录下生成com_magc_jni_HelloWorld.h头文件,此文件供C、C++程序来引用并实现其中的函数
程序清单2:com_magc_jni_HelloWorld.h
注:1)、此头文件是不需要用户编译的,直接供其它C、C++程序引用。
2)、此头文件中的Java_com_magc_jni_HelloWorld_DisplayHello(JNIEnv *, jobject)方法,是将来与动态链接库交互的接口,并需要名字保持一致。
第四步:建立c文件 src/jni_helloworldImpl.c
#include
#include "com_magc_jni_HelloWorld.h"
#include
JNIEXPORT void JNICALL Java_com_magc_jni_HelloWorld_DisplayHello(JNIEnv *env, jobject obj)
{
printf("From jni_hellowroldImpl.c:");
printf("hello world\n");
return ;
}
指令的值
此C文件实现了上述头文件中的函数,注意方法函数名要保持一致。
编译生成动态库libHello.so,
命令:gcc -shared -I /usr/lib/jvm/jdk-8-sun/include -I /usr/lib/jvm/jdk-8-sun/include/linux/ jni_helloworldImpl.c -o libHello.so
成功后,便会在当前目录下生成动态链接库libHello.so文件。
有了具体实现的动态库后,就可以运行JAVA调用JNI程序类的native方法了,
命令:java -Djava.library.path=. com.magc.jni.HelloWorld
输入结果即为:From jni_helloworldImpl.cpp :Hello world !
阅读(1404) | 评论(0) | 转发(0) |