JNI 作为一个编程框架,可以使得java程序可以调用或者被调用使用C或C++编写的库。
java调用C实现的HelloWorld例子
HelloWorld.java
class HelloWorld
{
private native void print();
public static void main(String[] args)
{
new HelloWorld().print();
}
static {
System.loadLibrary("HelloWorld");
}
}
java命令生成h头文件
javac HelloWorld.java
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: print
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_print
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
libHelloWorld.c 主要函数功能的实现
#include <stdio.h>
#include "HelloWorld.h"
JNIEXPORT void JNICALL
Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
printf("Hello World!\n");
return;
}
run.sh
# gcc 4.4.7
# openjdk 1.7.0
export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH
gcc -shared -fPIC libHelloWorld.c -o libHelloWorld.so
java HelloWorld