天天看点

JNI技术详解,让程序有飞一般的感觉

如果你对程序的性能要求比较高,或者觉得java的运行速度已经满足不了你,底层也可以采用C++来完成,使用JNI技术直接调用,会让你的程序有飞一般的感觉。前段时间做了调研,踩了几个坑,这里总结下,希望大家少走弯路。

本文分别在windows环境和linux环境下介绍如何实现该技术。

使用工具:

1.JAVA使用的IDE为eclipse

2.windows环境下C++使用的IDE为visual studio 2010

3.linux环境下C++使用的编译器为gcc/g++

eclipse新建工程名为"jniDemo"的java工程,在包名为com.woniu.Native下新建"NativeCpp.java"类,如下:

编译生成.class文件

进入工程下的target\classes目录下,执行"javah -jni com.woniu.Native.NativeCpp",运行结果如下:

此时,会在classes目录下生成"com_woniu_Native_NativeCpp.h"头文件,头文件内容如下:

vs2010新建工程名为"JniDll"的win32控制台应用程序,win32应用程序向导界面选择 "DLL"

创建完成后,把2.1中生成的"com_woniu_Native_NativeCpp.h"头文件放入该工程,并把头文件中的#include <jni.h>改为 "jni.h",

把JDK下include文件夹下的"jni.h"和include下win32文件夹下的"jni_md.h"头文件也一同放入创建的工程中。

工程目录如下:

编辑JniDll.cpp源码文件,实现头文件中的函数,如下:

我本机是64位系统,使用的是64位JDK,这里生成的动态库也要生成64位的库,否则调用的时候报如下错误:

编译生成解决方案,这时候会在工程根目录下,生成"x64文件夹",Debug文件夹下会有动态库"JniDll.dll"

运行结果如下:

a.安装gcc和g++

  yum install gcc-c++

b.安装jdk

  去官网上下载jdk安装包,建议使用rpm安装包,会自动配置环境变量。安装完后如下:

  本机的安装目录为:/usr/java/jdk1.8.0_144/,不同版本可能不同。

这里一定要注意不能安装openjdk,因为openjdk没有include目录,编译时需要用到include目录的头文件。

a.创建文件夹"jniso",mkdir jniso。

b.把2.1中生成的头文件"com_woniu_Native_NativeCpp.h"拷贝过来,#include "jni.h"改为#include <jni.h>

c.新建jni.cpp源文件,添加如下代码:

d.编译,生成动态库

g++ -fPIC -c jni.cpp -I /usr/java/jdk1.8.0_144/include/ -I /usr/java/jdk1.8.0_144/include/linux/

g++ -shared jni.o -o jni.so

原文出处:Java架构师之路

转载请与作者联系,同时请务必标明文章原始出处和原文链接及本声明。