环境:debian6.
安装c语言编译工具:apt-get install build-essential
编写java代码:
package com.netease.test.model; /** * Created by hzjiaoguangcai on 2017/6/22. */ public class JniDemo { //使用JAVAH命令生成包含native方法定义的C/C++头文件。 //该命令需要使用JDK/bin目录下javah.exe public native void sayHello(int a,boolean b); static { System.loadLibrary("demo"); }; /** * @param args */ public static void main(String[] args) { JniDemo jniDemo = new JniDemo(); System.out.println(System.getProperty("java.library.path")); jniDemo.sayHello(100,false); } }在java工程的com同级目录下编译执行
/usr/lib/jvm/jdk8/bin/javac com/netease/test/model/JniDemo.java 生成com/netease/test/model/JniDemo.class文件
然后 执行/usr/lib/jvm/jdk8/bin/javah com.netease.test.model.JniDemo,
会在com统计目录下生成一个com_netease_test_model_JniDemo.h的文件,
内容
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_netease_test_model_JniDemo */
#ifndef _Included_com_netease_test_model_JniDemo
#define _Included_com_netease_test_model_JniDemo
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_netease_test_model_JniDemo
* Method: sayHello
* Signature: (IZ)V
*/
JNIEXPORT void JNICALL Java_com_netease_test_model_JniDemo_sayHello
(JNIEnv *, jobject, jint, jboolean);
#ifdef __cplusplus
}
#endif
#endif
编写一个这个头文件的实现demo.c,内容如下
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
#include <stdio.h>
/* Header for class com_netease_test_model_JniDemo */
#include "com_netease_test_model_JniDemo.h"
/*
* Class: com_netease_test_model_JniDemo
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_netease_test_model_JniDemo_sayHello
(JNIEnv *a, jobject jo, jint i, jboolean b){
printf("HelloWorld JNI %d! %d\n",i,b);
}
编译这个.c文件产生一个共享动态库,debian(32位)系统中在demo.c所在目录下执行的命令。
gcc -o libdemo.so -fPIC -shared demo.c -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux -L${JRE_HOME}/lib/i386/client
这时候产生一个libdemo.so的文件,将libdemo.so复制到/usr/lib目录下。备注,可以现根据
System.out.println(System.getProperty("java.library.path"));的输出结果加载库所在的位置,而把libdemo.so放在
响应的位置。
最后编译JniDemo.java
/usr/lib/jvm/jdk8/bin/javac com/netease/test/model/JniDemo.java
运行:
/usr/lib/jvm/jdk8/bin/java com/netease/test/model/JniDemo
输出
/usr/java/packages/lib/i386:/lib:/usr/lib
HelloWorld JNI 100! 0