JNi初探-环境搭建

    最近想了解下jni,因此需要搭建一下基于win10的开发环境,那本文主要讲win下jni开发c/c++环境的搭建,因为我们知道jni主要是起到一个桥梁的作用,主要的实现是c/c++程序,java来调用jni很简单,只需要了解下javah,因为发现很多jni文章都在说给提供so库的过程,而没有说dll如何提供,而恰巧本人是win10系统,故阐述下jni尝试的问题。

1、搭建Clion开发环境

    首先搭建开发环境,本人有过一篇基于wsl搭建开发环境配置wsl的ssh服务开机启动文章,当然那篇文章主要是讲如何设置wsl的ssh服务开机自动启动,不多说,先上图,下图为Clion需要的开发环境配置。

JNi初探-环境搭建

    该图就是Clion的主要配置,即图中1,2,3所示,主要配置Toolchains,Toolchains有4种方式,MinGW、Cygwin、WSL、Remote Host,这4个软件我们就是要一下它们给提供的Make、C Compiler、C++ Compiler套件,为什么说就这3个呢,因为Clion内已经集成了CMake、GDB,当然也可以自己在本地配置,那重点来了这4个软件哪来的,MinGW、Cygwin这两者是一个组件和套件的关系(当然不能这么说,方便理解),WSL是win10的Linux子系统,Remote Host故名思意就是远程的Linux主机,至于这4个的安装就不多说了,网上随便找找就有,当然最简单的就是Remote Host,为什么这么说呢,随便搞个云服务器就ok了,这里我们说说MinGW吧,为什么说它呢,简单了我这是win10系统,根本来说我的java需要jni给我来个dll而不是so

2、dll库生成

     重点来了,dll库咋来的,如上图安装好MingGW配置好Clion后,就只需要把javah生成的java程序的.h头文件以及jdk的jni.h、jni_md.h复制到项目里,当然也可以做其它的处理,比如放到系统库默认搜索路径或在CMakeLists文件中配置,目的只是让头文件的include有效,注意创建项目时区分下静态库和共享库,接下来就是写个c/c++的实现.c/.c++,然后build一下dll就来了,如下图。

JNi初探-环境搭建

 3、java程序System.loadLibrary("cygc_share_lib")

    java程序cygc_share_lib加载路径:1、jre\bin 2、委托ClassLoader去加载 3、系统变量。

    时间紧张,暂时没来得及到java程序中去,调一下这个dll,可能还有些其它问题,大家可自行研究,到这里想说点其它的,比如CMake,make,gcc,g++,gdb这些都是些什么啊,说这么多什么呢,就是其实可以看看c的编译过程,GNU*软件,系统调用等等相关知识。