jni的使用方法

Posted 被罚站的树

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于jni的使用方法的主要内容,如果未能解决你的问题,请参考以下文章

01_JNI是什么,为什么使用,怎么用JNI,Cygwin环境变量配置,NDK案例(使用Java调用C代码),javah命令使用

Java程序通过JNI调用C++程序的方法

简单地迁移你的android jni代码逻辑到iOS - 编写iOS下jni.h的替代 - ocni.h

JNI学习笔记

混合编程jni 第九篇之Jni总结

JNI技术