</p> 注:1)、此头文件是不需要用户编译的,直接供其7 J$ R+ s) s# a8 |# o. z
/* DO NOT EDIT THIS FILE - it is machine generated */
. K3 i6 Y/ x5 O) h #include ( d4 `2 L" V9 Z. a# z- N
/* Header for class com_magc_jni_HelloWorld */
/ P, a% N" j3 x9 O. Q4 r- n# a5 f #ifndef _Included_com_magc_jni_HelloWorld
v4 r3 Q6 G% J) [) Q9 V- Q #define _Included_com_magc_jni_HelloWorld
; ?, Z7 ]! Y- o8 u1 a #ifdef __cplusplus Z+ u1 B/ ^2 I$ R# e( U+ o
extern "C" {
6 V2 Z7 `; R/ P #endif; ]& Y3 H. u: y3 U
/*+ w- U0 K! v. s, A
* Class: com_magc_jni_HelloWorld* [# [6 G& i3 E: B5 }
* Method: DisplayHello& r5 `2 E0 L1 U! _
* Signature: ()V
+ _7 B* I+ ^% b/ D( T) n) `" d3 p' l */
. n5 g. _* l t5 z7 p+ U JNIEXPORT void JNICALL Java_com_magc_jni_HelloWorld_DisplayHello/ Q" h- U6 P$ v, e$ P
(JNIEnv *, jobject);; b' L9 ^3 S: o- G' ^! u7 s
#ifdef __cplusplus
0 N! q2 E6 g* D7 u" x, p }$ H$ H4 I9 |5 I9 D, ?
#endif
# I0 G2 S8 V; o& u" r5 k/ Z #endif8 {/ K) }1 M, M7 g( K* s4 N
它C、C++程序引用。
# x$ ^3 ~) C5 _& p0 v c 2)、此头文件中的Java_com_magc_jni_HelloWorld_DisplayHello(JNIEnv *, jobject)方法,是将来与动态链接库交互的接口,并需要名字保持一致。
$ e+ o* l. \) z: l0 B3 @ 程序清单3:src/jni_helloworldImpl.cpp2 c0 l: X# ?! x7 X
#include
7 l h5 }) E1 m2 ~0 } #include "com_magc_jni_HelloWorld.h"0 d; \4 r* ~- x( Z0 z/ F% o
#include
3 K ^. X6 f' O" K3 O! d JNIEXPORT void JNICALL Java_com_magc_jni_HelloWorld_DisplayHello3 O3 g. Z% r2 f( p: f4 S; U J( ?
(JNIEnv *env, jobject obj)
# v/ _8 C5 U- a* A {
M7 c$ `1 }8 o printf("From jni_helloworldImpl.cpp :");
% }3 J8 ~; `* f3 x' L* p( ~ C# K# h printf("Hello world ! \n");
& ]2 h0 q$ l/ n return;. m) `9 N1 A/ Q' A8 M4 L, t) K1 d
}
& e# i6 X- \- O9 \( o 此C++文件实现了上述头文件中的函数,注意方法函数名要保持一致。7 w2 b4 |8 ?7 C/ j2 Z, C
编译生成动态库libHello.so,
6 l4 p9 k3 i! I! ]2 ?) F 命令:g++ -shared -I /usr/lib/jvm/java-6-openjdk/include jni_helloworldImpl.cpp -o libHello.so
O: }1 _( h) v6 r( j8 H 成功后,便会在当前目录下生成动态链接库libHello.so文件。8 ?( k: `# m% I) a
有了具体实现的动态库后,就可以运行JAVA调用JNI程序类的native方法了,
' w8 e) ^' C, c# D# D5 H3 G 命令:java -Djava.library.path=. com.magc.jni.HelloWorld9 Z1 U+ m3 z6 Q5 ^7 o8 f
输入结果即为:From jni_helloworldImpl.cpp :Hello world ! |