目录
步骤2:生成native接口(HelloWorld.h)文件
步骤3:实现接口(HelloWorld.cpp)并编译成动态库so
Linux上编写jni实例
注意:一定要注意顺序。先做java文件里面的native接口,然后再使用javah实现c/c++;
步骤1:编写java 并编译
//HelloWorld.java
1 public class HelloWorld {
2
3 public native static long jni_add(int a, int b);
4 static {
5 System.load("/home/gysun/java-test/myjni/myjni.so");//载入dll Connector.dll
6 }
7
8 public static void main(String[] args) {
9 long ret = jni_add(10,20);
10 System.out.println("Hello World !" + ret);
11 }
12
13 }
$ javac HelloWorld.java
步骤2:生成native接口(HelloWorld.h)文件
$ javah -d myjni -jni HelloWorld
此时会生成目录myjni ,目录下文件HelloWorld.h 里面内容为:
$ vim myjni/HelloWorld.h
1 /* DO NOT EDIT THIS FILE - it is machine generated */
2 #include <jni.h>
3 /* Header for class HelloWorld */
4
5 #ifndef _Included_HelloWorld
6 #define _Included_HelloWorld
7 #ifdef __cplusplus
8 extern "C" {
9 #endif
10 /*
11 * Class: HelloWorld
12 * Method: jni_add
13 * Signature: (II)J
14 */
15 JNIEXPORT jlong JNICALL Java_HelloWorld_jni_1add
16 (JNIEnv *, jclass, jint, jint);
17
18 #ifdef __cplusplus
19 }
20 #endif
21 #endif
步骤3:实现接口(HelloWorld.cpp)并编译成动态库so
代码实例:
1 #include "HelloWorld.h"
2
3 JNIEXPORT jlong JNICALL Java_HelloWorld_jni_1add(JNIEnv *, jclass, jint a, jint b){
4 long c=0;
5 c = a + b;
6 return c;
7 }
编译:
$ gcc -fPIC -shared -o myjni.so HelloWorld.cpp -I"/usr/lib/jvm/java-8-openjdk-amd64/include" -I"/usr/lib/jvm/java-8-openjdk-amd64/include/linux"
~/java-test/myjni$ ls
HelloWorld.cpp HelloWorld.h myjni.so
步骤4:执行
$ java HelloWorld