jni的使用方法

我们可以通过jni来调用c/c++程序,C/C++一般会被作为动态库的形式来供java程序调用

环境


 操作系统:Centos6.7

java: openjdk7

依赖包:java7-devel(yum install -y java7-devel)

java程序


 在hava程序中会调用本地方法,而这个本地方法使用C语言实现的。

public class HelloWorld{
       static {
           System.loadLibrary("Hello");
       }
   
       public native void DisplayHello();
   
       public static void main(String[] args){
           new HelloWorld().DisplayHello();
      }
}

编译java程序:javac HelloWorld.java

生成相应的头文件:javah -jni HelloWorld

下面是生成的HelloWorld.h的内容,其中的白色部分就是需要在C代码中实现的函数。

C程序


#include<jni.h>
#include"HelloWorld.h"
#include<stdio.h>
JNIEXPORT void JNICALL Java_HelloWorld_DisplayHello(JNIEnv *env, jobject obj){
      printf("Hello world\n");
      return;
}

 在C程序中,我们需要包含jni.h以及刚才生成的HelloWorld.h。如果从C的角度来看,一般一个.h文件会对应一个.c文件。而.h文件中一般是函数的声明,而.c文件是具体函数的实现。HelloWorld.h中有函数的声明,而C程序中就应该有函数的实现。

这样,但是通过javah生成.h文件时,剩下的工作就是C方面的编程问题了。

将C程序生成动态库:

在生成动态库的时候需要制定头文件(jni.h)的位置,安装java依赖库的时候会将其安装到/usr/local下,所以需要用-I选项来明确指出

执行


 在执行的时候需要指定C库的位置

参考博文: 

http://blog.csdn.net/banketree/article/details/40535325

http://www.cnblogs.com/mandroid/archive/2011/06/15/2081093.html

posted @ 2016-08-28 22:37  被罚站的树  阅读(464)  评论(0编辑  收藏  举报