好吧,开始我的第一个JNI试验小程序
HelloWorld.java 代码清单
1 public class HelloWorld { 2 3 static { 4 System.loadLibrary("HelloWorld"); 5 } 6 7 public static native void hello(String msg); 8 9 10 public static void main(String args[]){ 11 HelloWorld hw = new HelloWorld(); 12 hw.Display(); 13 } 14 15 void Display(){ 16 System.out.println("hello,world"); 17 } 18 19 }
记得文件名必须和类名一致,编译
javac HelloWorld
利用 javah 命令生成c 的头文件,命令形式 javah <packagename>.<classname>,因为我没有定义包名,所以直接是类名:
javah HelloWorld
这样在目录下将会生成以包名为文件名的头文件 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: hello * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_HelloWorld_hello (JNIEnv *, jclass, jstring); #ifdef __cplusplus } #endif #endif
下面我们需要建立HeloWorld的动态共享库,先创建一个HelloWorld.c, 然后将头文件中的函数定义拷贝过来,并且指定参数的变量名
#include "HelloWorld.h" JNIEXPORT void JNICALL Java_HelloWorld_hello(JNIEnv * env, jclass jz, jstring s) { }
这是个毫无用处的函数,在java程序中我们也只有声明,没有调用,现在我只是试验他是否能正常装载。用 gcc 命令进行编译
时间: 2024-11-05 12:27:31