JNI
JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)。
演示环境
- Linux (64位)
第一步: 安装 jdk和gcc
$ sudo apt-get install openjdk-7-jdk
$ sudo apt-get install gcc
验证:
$ java -version
$ gcc -v
第二步:编写java程序
Helloworld.java
public class HelloWorld{
static
{
//加载动态库
System.loadLibrary("native");
}
//原生态方法
public native void say();
public static void main(String[] args) {
HelloWorld world=new HelloWorld();
world.say();
}
}
第三步:编译
$ javac HelloWorld.java
第四步:生成JNI头文件
$ javah HelloWorld
第五步:编辑JNI头文件
$ vim HelloWorld.h
第六步:
- 完成JNI头文件中的原生态方法
- 且更名为HelloWorld.c
#include <jni.h>
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: say
* Signature: ()V
*/
//-------------------------------完成此方法-------------------------
JNIEXPORT void JNICALL Java_HelloWorld_say
(JNIEnv * jni, jobject obj){
printf("%s\n", "HelloWorld!");
}
//----------------------------------------------------------------
#ifdef __cplusplus
}
#endif
#endif
保存.
第七步:编译JNI头文件生成so动态库
linux动态库 lib + 库的名字 + .so
windows .dll
$ gcc HelloWorld.c -shared -fPIC -o libnative.so -I /usr/lib/jvm/java-7-openjdk-amd64/include/
第八步:设置程序共享库位置
$ export LD_LIBRARY_PATH=.
第九步:执行java程序
$ java HelloWorld
成功打印!
HelloWorld!