jni——java跨语言利器

        作为一个非专业的专业开发者,笨(不系统)是天性,积累是习惯,一个小小的机箱内的东西对个人来说,像宇宙一样不简单。痛苦也好,辛苦也罢,在这个局促的机箱中遨游吧。扯远了哈,个人觉得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
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值