要在java中调用c语言的库,一直觉得很不可思议,但是Java提供了JNI这个东西,这也就变得可能了. 作为一个码农,我们还是从最简单的 Hello World开始吧.
首先说一下我们想要做的事情. 在c语言中定义一个 void sayHello()函数(打印Hello World);然后在Java中调用这个函数显示Hello Word.
现在分别从Java和C语言两部分说明:
1. Java 部分
我们首先定义一个HelloNative,在其中申明sayHello函数,函数要申明为Native 类型的.如下:
public classHelloNative {public native voidsayHello();
}
编译这个类,生成class文件:
javac HelloWorld.java
利用javah生成需要的h文件
javah HelloNative
生成的 h文件大概如下:
/*DO NOT EDIT THIS FILE - it is machine generated*/#include
/*Header for class HelloNative*/#ifndef _Included_HelloNative#define _Included_HelloNative#ifdef __cplusplusextern "C"{#endif
/** Class: HelloNative
* Method: sayHello
* Signature: ()V*/JNIEXPORTvoidJNICALL Java_HelloNative_sayHello
(JNIEnv*, jobject);
#ifdef __cplusplus
}#endif
#endif
我们可以看一下上面自动生成的程序,程