java - 将 *.SO 库包含到 Java 项目 (Linux)
问题描述
我不是 Java 开发人员,但我需要解决一个问题:我需要将 linux SO 库包含到现有 Java 项目中。该库是使用 CGO 开发的,可与 C++、Python ctypes、Ruby FFI 等配合使用。但是我不能将它包含到 Java 项目中而不会出现错误(java.lang.UnsatisfiedLinkError)。我看过一些类似的文章,描述的方法是我需要先使用javah创建一个C头,然后编写一个C程序,等等。但是,如果我已经编译了 *.SO 文件,该怎么办?有没有办法,如何简单地加载现有的 SO 文件(用 C 编写)并调用它的函数?
解决方案
Java 没有内置的 FFI 功能。
将本机库 (.dll/.so) 与 Java 一起使用的一种选择是编写一个 JNI 包装库,该库具有可以绑定到 Java 本机方法的特殊功能。这是您需要用来javah
为包装库创建头文件的选项。有关如何执行此操作,请参阅 Oracle 网站上的“Java Native Interface”文档。
另一种方法是使用像JNA这样的“胶水”库。您不需要以这种方式构建另一个库,但您需要在项目中包含 JNA 并为其执行必要的 Java 声明。您可以在 Github 存储库中找到 JNA 的文档以及代码。这种方法类似于 Python、Ruby 等正在做的事情。
我建议阅读两者,看看什么更适合您的需求。
推荐阅读
- google-bigquery - 将 bigquery json 字符串转换为列
- c - 我在查看中定义的 read() 函数代码时遇到了麻烦
- r - 如何在r中重命名多个文件
- spring-boot - 如何通过单击视图名称链接到控制器中的视图文件
- angular - 以角度与 FormControlName 绑定
- python-3.x - 如何使用 pip3 在 debian 上安装 caffe?
- flutter - 是否可以从具有填充的列中排除 1 个小部件?
- hive - 如何快速制作从 hbase 到 hive 的快照?
- c# - ASP.NET Core 中配置对象的模型验证
- html - 手机导航栏不出现