我不是Java开发人员,但我需要解决一个问题:我需要将linux SO库包含到现有的Java项目中。该库是使用CGO开发的,可以与C ++,Python ctypes,Ruby FFI等一起使用。但我不能将它包含在没有错误的Java项目中(java.lang.UnsatisfiedLinkError)。我已经阅读了一些像this这样的文章,所描述的方法是我需要首先使用javah创建一个C头,然后编写一个C程序,依此类推。但是,如果我已编译* .SO文件该怎么办?有没有办法,如何简单地加载现有的SO文件(写在C上)并调用它的函数?
Java没有内置的FFI功能。
在Java中使用本机库(.dll / .so)的一个选择是编写一个JNI包装器库,它具有可以绑定到Java本机方法的特殊功能。这是您需要使用javah
为包装器库创建头文件的选项。有关如何执行此操作,请参阅Oracle网站上的“Java Native Interface”文档。
另一种方法是使用像JNA这样的“胶水”库。您不需要以这种方式构建另一个库,但是您需要在项目中包含JNA并为其执行必要的Java声明。您可以在Github存储库中找到JNA的文档以及代码。这种方法类似于Python,Ruby等。
我建议您阅读两者,看看哪种更适合您的需求。