首页  >  文章  >  Java  >  如何将本机库和 JNI 库捆绑在单个 JAR 文件中?

如何将本机库和 JNI 库捆绑在单个 JAR 文件中?

Susan Sarandon
Susan Sarandon原创
2024-11-12 02:02:01782浏览

How Can You Bundle Native and JNI Libraries in a Single JAR File?

将本机和 JNI 库捆绑在 JAR 中

最近,开发人员寻求一种方法来在一个 JAR 中整合多个依赖项(包括本机库)。单个 JAR 文件。该策略旨在简化分发并减少重新分发问题。

原生库难题

这项工作中遇到的挑战之一是包含实际的原生库,作为仅关注 JNI 库的现有尝试。此外,之前的解决方案似乎是针对特定的本机依赖项插件量身定制的,可能不适合一般重新分发。

综合解决方案

首选方法涉及利用System.load(File) 来加载库,而不是传统的 System.loadLibrary(String),后者依赖于 java.library.path 系统属性。这种方法不需要用户手动安装库,但如果 JAR 没有封装所有必需的库,则可能会影响跨平台的可移植性。

实现过程

  1. 将原生 JNI 库合并到 JAR 中特定于平台的位置,例如 NATIVE/${os.arch}/${os.name}/libname.lib。
  2. 实现代码在主类的静态初始化器中:

    • 确定当前的 os.arch 和 os.name。
    • 使用 Class.getResource( 在预定义路径的 JAR 中搜索库String)。
    • 如果库存在,将其提取到临时文件并使用 System.load(File) 加载它。

案例研究:jzmq

此解决方案用于 jzmq(ZeroMQ 的 Java 绑定),其中混合功能允许在无法加载嵌入式版本时回退到沿 java.library.path 搜索库.

以上是如何将本机库和 JNI 库捆绑在单个 JAR 文件中?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn