作为一个非专业的专业开发者,笨(不系统)是天性,积累是习惯,一个小小的机箱内的东西对个人来说,像宇宙一样不简单。痛苦也好,辛苦也罢,在这个局促的机箱中遨游吧。扯远了哈,个人觉得JNI是java语言与系统交互的基础,如I/O处理,对象创建等都离不开JNI的实现。因此,笔者决定以此作为学习JDK的初篇,慢慢去揭开java语言的面纱,没准哪天笔者自己写一个Eava或者Hava也说不定,期待吧,比卡丘!
一、基本介绍
JNI是Java Native Interface的缩写,即java本地接口(来源:度娘)。
我们知道Windows系统也好(本文章下文做的操作皆以此系统作为运行环境),Linux系统也罢,汇编语言只在系统的开发中占一小部分,主要应用在与机器交互的内核命令中,其中一大部分还是用c/c++开发的,特别是系统提供给开发者和用户的库函数中。因此,一些我们比较熟悉的跨平台语言如python、java、golang等(这个排序不代表笔者心中的地位,笔者一直认为机器语言是最好的语言,一切尽在0|1中)底层都是用c/c++开发的。
或者我们也可以这样理解,高级语言只是一种表达方式,比如一块石头,你说“stone”还是“石头”,最终想要给别人展示的都是那块玩意儿,我们只不过是用不同的语言体系赋予了一个物什抽象表达,而JNI则是java语言体系对于本地函数(库函数、自定义c/c++函数)的转换方式罢了。
二、静态链接和动态链接
一个c语言项目需要经过预处理、编译、汇编、链接阶段才能生成可执行文件,经过汇编之后就生成了包括我们机器认识的机器指令的对象文件。对象文件不是可直接执行的文件,特别是,当我们在一个对象文件中还调用了别的文件的函数时,就需要通过链接的方式,让两个文件生成调用与被调用关系。在c语言中链接的方式有两种,即静态链接和动态链接。
2.1 静态链接
静态链接很像是结了婚,别小看那个小本本,它在让两个人都有了家的存在的同时,定义了一个法定事实,即你的是我的,我的还是我的,在这个过程中调用和被调用函数都被放进了可执行文件中,因此,可执行文件脱离了静态库也是可以运行的。我们来看一个示例:
add.c
int add(int a,int b)
{
return a + b;
}
multi.c
int multi(int a,int

最低0.47元/天 解锁文章
577





