</p> 注:1)、此头文件是不需要用户编译的,直接供其5 i6 L. P( r4 t5 G, N& ~% k
/* DO NOT EDIT THIS FILE - it is machine generated */& N# k6 G; B# @- u! I' ]
#include R5 }' y: }: E+ Z& |) A$ W
/* Header for class com_magc_jni_HelloWorld */( c0 j. A4 K$ g5 m0 i2 z
#ifndef _Included_com_magc_jni_HelloWorld# N% o7 f- P6 e6 V4 w
#define _Included_com_magc_jni_HelloWorld
, e( }) R$ V. T #ifdef __cplusplus
* y$ n h7 X. A( \8 b# l. Q extern "C" {+ X# Q1 ?' E0 v5 m0 K& W( V% V
#endif
3 Q% e3 H: ~+ _) y! t /*9 N2 l" R9 r s6 N% Q/ ]% D0 r
* Class: com_magc_jni_HelloWorld
( g$ ?9 Z' e8 @9 L * Method: DisplayHello& U+ w" w! z" x$ w
* Signature: ()V
8 ]) i, L& c; }; i# Z9 x, E1 u% B */
7 f1 \3 g. @0 k$ j; o! ?2 V JNIEXPORT void JNICALL Java_com_magc_jni_HelloWorld_DisplayHello- {3 P$ P1 u( M. K' a
(JNIEnv *, jobject);5 ?- ^) K5 p* o6 w0 C9 w
#ifdef __cplusplus; ^' E& F Q# _/ D C" v# l
}$ s) i" @2 J% ^) B
#endif
, V% c( s0 H, p' [3 R0 y #endif& z: N$ C% N2 @) e4 I% m+ j- a
它C、C++程序引用。! P% I2 |5 V$ I2 k6 l
2)、此头文件中的Java_com_magc_jni_HelloWorld_DisplayHello(JNIEnv *, jobject)方法,是将来与动态链接库交互的接口,并需要名字保持一致。
; ]2 D! Y' i. P, K W$ U1 y/ i 程序清单3:src/jni_helloworldImpl.cpp/ w1 \ D6 K& I
#include * W7 F3 T, X" V0 m. a5 n$ Z, `
#include "com_magc_jni_HelloWorld.h"
5 F5 q( x, T, q1 P1 @( M #include : W+ k3 A5 h- v! t, V& q1 L
JNIEXPORT void JNICALL Java_com_magc_jni_HelloWorld_DisplayHello
) S3 V: ?% I F2 X6 [/ |/ l (JNIEnv *env, jobject obj)( E# a4 g( v: G5 N) }9 [9 H
{
/ Y" o1 g1 O) D% ~' U1 `' G1 B4 m0 s printf("From jni_helloworldImpl.cpp :");
8 X/ D( _) {: ^* c printf("Hello world ! \n");5 B. m ~, A- a$ I
return;7 F0 j( }8 F* H* P* a* ^
}4 g# n" U: a- f- B! k& X0 U( r5 ?
此C++文件实现了上述头文件中的函数,注意方法函数名要保持一致。
5 k! \$ @7 t+ n* F1 K 编译生成动态库libHello.so,
9 e- X% V' G) ~" n# M% @0 Q1 x* z0 l 命令:g++ -shared -I /usr/lib/jvm/java-6-openjdk/include jni_helloworldImpl.cpp -o libHello.so
1 u: [8 Y- ~$ E4 V" Z7 s9 p 成功后,便会在当前目录下生成动态链接库libHello.so文件。+ I3 m& L' l1 A$ O8 I
有了具体实现的动态库后,就可以运行JAVA调用JNI程序类的native方法了,
+ D( H+ w- I- k. s 命令:java -Djava.library.path=. com.magc.jni.HelloWorld
3 H0 C, V: }2 \( K. E7 Q$ F 输入结果即为:From jni_helloworldImpl.cpp :Hello world ! |