@[TOC](Java通过JNI实现调用C++动态链接库(.so /.dll))
Java通过JNI实现调用C++动态链接库(.so)
最近需要将一个Ubuntu系统上搭建的C++项目转到Java上面实现,由于原来的项目比较复杂,并且需要调用一些第三库(Ceres,Eigen),因此直接用Java语言实现的话,很多第三方库无法替代。因此,考虑通过JNI调用C++动态链接库的方式实现Java调用c++函数。 在这里申明一个新定义的函数作为主函数,在原来cpp里面去调用其他的函数,这样编写Java比较方便,同时对原cpp文件改动较少。其实也可以重新建一个cpp文件,如何调用原来项目cpp文件里面定义的函数,这样的好处是不改动源代码。
方法思路:Java+cpp内部定义新函数**
1、Java文件申明一个native函数,目的是在cpp里面调用原函数;
2、Java里面加载动态链接库(.so)入口;
public class INSVLP {
static {
System.loadLibrary("insvlpcc"); // Load native library at runtime
}
public native void PosCal(String filePath);
public static void main(String[] args) {
String cd= System.getProperty("user.dir");
String path0=cd+"/config/simu.yaml";
INSVLP Insvlp=new INSVLP();
Insvlp.PosCal(path0); // invoke the native method
}
}
3、通过JNI工具生成 .h 文件;
javac INSVLP.j