所有的动态语言,包括在java在内,一般都会提供一个调用c库的方法。java语言的出现是在上个世纪90年代,而c/c++出现的时间要更早一点,大约提前了20多年,所以在这过程当中积累了很多的资源可以调用。此外,由于c/c++可以直接控制硬件,可以直接加速算法的执行,所以作为上位机开发的同学来说,掌握好c库调用也是很有必要的。
c库调用的方法很多,比较常用的就是jni。jvm作为java虚拟机,调用class字节码,这个大家都了解。那字节码如果需要调用c库,一般会在java代码中有一个显示调用的过程,关键字是native。注意native是函数的名字,不是动态库的名字,动态库的名字一般用System.LoadLibrary来完成,也就是上述图中蓝色的部分。对于简单的动态库,只需要在浅绿色中实现即可。而对于opencv、plc、ffmpeg、jpeg、png这样成熟的动态库来说,浅绿色的部分就是一个翻译的过程,库本身还是原来黄色的部分。这就是绿色和黄色两个模块的区别。下面举例说明,
1、假设有一个java文件,需要调用一个显示HelloWorld的c方法,
public class HelloWorld { public native void displayHelloWorld(); static { System.loadLibrary("HelloWorldImpl"); } public static void main(Str