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