【问题标题】:Including the *.SO library to the Java project (Linux)将 *.SO 库包含到 Java 项目 (Linux)
【发布时间】:2018-09-13 06:52:50
【问题描述】:

我不是 Java 开发人员,但我需要解决一个问题:我需要将 linux SO 库包含到现有 Java 项目中。该库是使用 CGO 开发的,可与 C++、Python ctypes、Ruby FFI 等配合使用。但是我不能将它包含到 Java 项目中而不会出现错误(java.lang.UnsatisfiedLinkError)。我看过this之类的文章,描述的方法是我需要先用javah创建一个C头文件,然后再写一个C程序,等等。但是,如果我已经编译了 *.SO 文件,该怎么办? 有没有办法,如何简单地加载现有的 SO 文件(用 C 编写)并调用它的函数?

【问题讨论】:

  • Java 是独立于平台的,也就是说,可能在 JNI 上阅读过?例如。 medium.com/@bschlining/… 在 Windows 上我要做的就是编写自己的 DLL,称为第三方 DLL。这样我就可以完成整个 h 文件的事情

标签: java java-native-interface shared-libraries


【解决方案1】:

Java 没有内置的 FFI 功能。

在 Java 中使用本机库 (.dll/.so) 的一种选择是编写一个 JNI 包装库,该库具有可以绑定到 Java 本机方法的特殊功能。这是您需要使用javah 为包装库创建头文件的选项。有关如何执行此操作,请参阅 Oracle 网站上的“Java Native Interface”文档。

另一种方法是使用像JNA 这样的“胶水”库。您不需要以这种方式构建另一个库,但您需要在项目中包含 JNA 并为其执行必要的 Java 声明。您可以在 Github 存储库中找到 JNA 的文档以及代码。这种方法类似于 Python、Ruby 等正在做的事情。

我建议阅读两者,看看哪些更适合您的需求。

【讨论】:

    猜你喜欢
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多