JNI 学习

 

  • 简介

     JNI是java native interface的简写,JNI主要用于通过java程序调用本地库,在windows世界里是.dll文件,在unix世界里是.so文件。

  • 使用

      使用JNI主要包含如下步骤:

(1)编写java代码,注明要访问的本地动态连接库和本地方法;
(2)编译得到.class文件;
(3)使用javah 生成该类对应的C语言.h文件;
(4)使用C/C++实现(3)生成的.h文件中声明的各函数;
(5)编译C/C++实现代码生成动态连接库。
(6)生成jar包供别人调用

     下面将用经典的HelloWorld来说明一下如何使用JNI:

     1. 编写HelloWorld.java,首先需要在该类中load所调用的库,其次要声明在本地库中的方法名称,如下:

public class HelloWorld
{
    static{
        System.loadLibrary("hello");
    }
    public native void sayHello();
}

     2. 编译 HelloWorld.java 生成 HelloWorld.class

javac HelloWorld.java

     3. 根据 HelloWorld.class 生成 HelloWorld.h

javah HelloWorld

         这里面只要关注在本地库中实现的方法。

JNIEXPORT void JNICALL Java_HelloWorld_sayHello

(JNIEnv *, jobject);

     4. 编写 HelloWorld.cpp 实现上面的函数

#include "HelloWorld.h"

void JNICALL Java_HelloWorld_SayHello(JNIEnv * env, jobject obj)
{
    printf("Hello, world");
}

     5. 编译生成.so文件

g++ -fPIC -shared HelloWorld.cpp -o libhello.so

     6. 生成jar包

jar cvf hello.jar HelloWorld.class

  • 需要注意的地方

      1. .c或者.cpp文件实现的函数要和.h文件定义的名字一样才行

      2. 如果load的本地库为hello,则生成的时候要指定-o libhello.so

posted @ 2010-01-19 22:07  花生太郎  阅读(285)  评论(0编辑  收藏  举报