JAVA JNI学习

JAVA JNI

 

JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。

设计目的

标准的java类库可能不支持你的程序所需的特性。 JNI

或许你已经有了一个用其他语言写成的库或程序,而你希望在java程序中使用它。

你可能需要用底层语言实现一个小型的时间敏感代码,比如汇编,然后在你的java程序中调用这些功能

 

 

JNI步骤:

 

1、   编写JAVA程序

Public class JniTest{

        native int add(int a , int b);

        //所有native关键词修饰的都是对本地的声明

        Static {

           System.loadLibrary(“add”);

           //加载动态库(libadd.so)

}

public static void main(String [] args){

      System.out.println(“start java app”);

      JniTest jniTest = new JniTest();

      int ret;

      ret = jniTest.add(4,6);

      System.out.println(“jni test result is: ” + ret);

 

}

}

 

2、   编译JAVA程序

javac JniTest.java

javah  -jni JniTest会生成JniTest.h如下

 

把JniTest.h改成add.c(mv JniTest.h  add.c)并把文件必修如下

 

2.1JNI函数命名规则

   Java(固定)_<包名,如com_android_xxx>_<类名>_<函数名>

   Java_JniTest_add

   固定 类名  函数名 (例中没有对JAVA进行打包)

3、   编译动态库

gcc –fPIC –c add.c –o add.o

在编译过程中会出现jni.h等文件找不到,所以用绝对路径指定头文件:在add.c修改如下

 

在jni.h修改如下

 

 

gcc –shared  add.o  –o libadd.so

//生成libadd.so动态库

4、   执行JAVA程序

LD_LIBRAY_PATH=.  java JniTest

//为程序增加从当前目录加载动态库

执行结果:

start java app

jni test result is: 10

 

 

总结:在过程中注意所包含的头文件是哪里的,jni.h是java(编译器)提供的,所以在<JAVA_HOME>/include/;通常我们写的linux程序的头文件是在/usr/include/下(gcc提供)

OK,完毕!!!!!!!!!!!!

 

转载于:https://www.cnblogs.com/brave-firm/p/3941267.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值