NI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java NativeInterface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。
编写下面3个源文件之后依次在shell下输入以下命令:
unset LD_LIBRARY_PATH
JavaHome=/usr/java/jdk1.7.0_01/include
javac HelloWorld.java #在当前目录下编译生成HelloWorld.class文件
gcc -I$JavaHome -I${JavaHome}/linux -shared -o libhello.so HelloWorldImp.c #生成hello动态库
java -classpath . HelloWorld#可以运行了
1.Hello.java源文件
class HelloWorld{
public HelloWorld(){}public native void displayHelloWorld();
static{System.loadLibrary("hello");}
public static void main(String[] args){
new HelloWorld().displayHelloWorld();
}
}
2.HelloWorld.h头文件
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: displayHelloWorld
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
3.接口实现HelloWorldImp.c
#include "jni.h"
#include "HelloWorld.h"
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *a, jobject b){
printf("Hello world!\n");
return;
}