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