步骤:
- 先建立一个标准java Class
class TestNative {
private native void print(); //注意方法声明
public static void main ( String [ ] args ) {
new TestNative().print(); //注意调用方法
}
static {
System.loadLibrary ("helloWorld"); // 注意Load 动态库的语法.
}
}
- 注意:根据Java JNI 规范,
- 生成C用头文件
- javac TestNative.java
- javah ?jni TestNative
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class TestNative */
#ifndef _Included_TestNative
#define _Included_TestNative
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: TestNative
* Method: print
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_TestNative_print
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
注意红色的: Java_TestNative_print 函数名的生成是按照JNI规范产生的
模式为Java_类名_方法名.
- 编辑对应的C代码:
#include "TestNative.h" //这行必须加入
JNIEXPORT void JNICALL
Java_TestNative_print ( JNIEnv* env, jobject obj )
{
printf ( "Hello, Native!\n" ) ;
return ;
}
- 编译源程序(注意生成的动态库的命名规则
[root]# gcc TestNative.c -o libhelloWorld.so -shared -I /usr/java/j2s
dk1.4.2/include/linux/ -I /usr/java/j2sdk1.4.2/include/
Window:..
- 设置路径
export LD_LIBRARY_PATH= .so文件所在目录名
- java TestNative 得到结果