分类: LINUX
2011-03-20 17:55:44
本文以一个简单的实例来介绍Java和Native之间的函数调用。
1、创建HelloWorld.java
class HelloWorld{
private native void print();
public static void main(String[] args){
new HelloWorld().print();
}
static {
System.loadLibrary("HelloWorld");
}
}
2、编译HelloWorld.java,生成HelloWorld.class
javac HelloWorld.java
3、由HelloWorld.class创建JNI头文件HelloWorld.h
javah -jni HelloWorld 生成的HelloWorld.h内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: print
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_print
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
4、编写Native函数HelloWorld.c,内容如下:
#include
#include
#include "HelloWorld.h"
JNIEXPORT void JNICALL Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
printf("helloWorld!\n");
return;
}
5、编译HelloWorld.c生成动态库文件HelloWorld.so
gcc –shared -I /usr/lib/jvm/java-
参数-shared表示生成动态链接库。 -I表示包含的头文件路径
6、运行HelloWorld程序
java HelloWorld
运行结果:helloWorld!
-Djava.library.path=.表示添加当前目录为.so的库文件路径