java jna 动态库从资源路径载入问题?

开发了一个功能 jar 包,依赖动态库。为了方便分发,动态库打包到了 resources 目录,
用的 Native.loadLibrary 方法载入。

  • 在 IDEA 开发环境下直接运行,正常。
  • 打包 jar 自己运行,正常。
  • 被其他项目以 jar 库形式依赖,其他项目调用接口,报错,找不到动态库。

感觉这应该是一个比较常见的诉求吧,也不知道众多其他第三方库都是怎么处理的。

阅读 1.7k
2 个回答

jna 中的 Native.load 方法加载。

resources 下面建立 linux-x86-64,放入 so 文件比如 libmyload.so

建立一个 Class:

public interface MyLoad extends Library {
    // 定义 so 文件中的方法。
}

之后加载:

        try {
            mt = Native.load("myload", MyLoad.class);
        } catch (UnsatisfiedLinkError e) {
            log.error("", e);
        }

这样就能直接从 jar 中的 resources 文件中加载到 so。


使用 jna 更加方便,不需要像 jni 那样定义繁琐的 jni 接口方法。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题