JNI 小结

最近学习 JNI,先把目前的理解 Note 下来,后面再慢慢修改,如果不对的地方,请指出,3Q

 

JNI 介绍就不说了,直接进入应用方法,这里说的是 Java 引用 C++ 接口:(目前看到两种)

这里只 Note :从 Java 需要的接口,到 C++ 生成相应的 .so 的过程。

1.这第一种方法最大的特点是:C++的函数名由 Java 的文件编译决定,而且 C++ 文件要引用 Java 生成的 .h 文件。

   这种方法在 Windows 和 Linux 中都有看到(因为第二种方法,现在只在 Linux 中看到使用,还没验证 Win32 上的情况),过程为:

   生成 .so 的过程: 

   (1) 先把 Java 需要调用的接口在 .java  文件里写出来。函数使用 native 关键字 

         如 public native static void set(int i);  后面应用时,Java 程序调用 C++ 的功能就是通过这个接口。

   (2) 调用 javac 命令,编译这个文件生成 class,  然后调用 javah 命令,生成 .h 文件。

         这个文件里定义了 C++ 中与 .java 中接口 set 对应的函数的函数名,以及参数。如下:

         JNIEXPORT void JNICALL Java_testdll_set (JNIEnv *, jclass, jint);

   (3) 下面要做的就是编写 .cpp 实现 这个 .h 文件中的接口。然后编程生成 .so

 

2.第二种方法的特点是:实现功能的 C++ 函数名可以任意定义,只要把它与 Java 的接口一一对应就可以,当然这样 Java 也就不需要生成 .h 供 C++ 来应用了(目前这种方法只在 Linux 上看到,Win32 上没验证)。下面就进入过程说明(生成 .so 的过程全在 C++ 中,不要 Java 参与,只需要知道 Java 需要的接口函数就可以了):

    (1)当然开始还是要 Java 写出需要的

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值