JNI
JNI是Java Native Interface的縮寫(xiě),它提供了若干的API實(shí)現(xiàn)了Java和其他語(yǔ)言的通信(主要是C&C++)。
演示環(huán)境
- Linux (64位)
第一步: 安裝 jdk和gcc
$ sudo apt-get install openjdk-7-jdk
$ sudo apt-get install gcc
驗(yàn)證:
$ java -version
$ gcc -v
第二步:編寫(xiě)java程序
Helloworld.java
public class HelloWorld{
static
{
//加載動(dòng)態(tài)庫(kù)
System.loadLibrary("native");
}
//原生態(tài)方法
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頭文件中的原生態(tài)方法
- 且更名為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動(dòng)態(tài)庫(kù)
linux動(dòng)態(tài)庫(kù) lib + 庫(kù)的名字 + .so
windows .dll
$ gcc HelloWorld.c -shared -fPIC -o libnative.so -I /usr/lib/jvm/java-7-openjdk-amd64/include/
第八步:設(shè)置程序共享庫(kù)位置
$ export LD_LIBRARY_PATH=.
第九步:執(zhí)行java程序
$ java HelloWorld
成功打犹瘫猎塞!
HelloWorld!