所有的动态语言,包括在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(String[] args) {
// TODO Auto-generated method stub
HelloWorld helloWorld = new HelloWorld();
helloWorld.displayHelloWorld();
}
}
代码中需要调用的dll库

本文介绍了Java如何通过JNI调用C库进行上位机开发。内容涉及C库调用的重要性、JNI的使用方法,以及一个显示调用C库方法HelloWorld的步骤,包括Java代码编写、生成头文件、CMake构建解决方案、编译DLL及最终运行验证的过程。此技术可应用于各种动态库,如opencv、plc、ffmpeg等。
最低0.47元/天 解锁文章
9686

被折叠的 条评论
为什么被折叠?



