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

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

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

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


回答:

简单研究发现,似乎只能从文件路径进行加载。 https://stackoverflow.com/questions/4113317/load-library-from-jar

所以,解决方案应该是,在运行时 将动态库解压至临时文件目录,在执行完毕后 将临时文件清除即可。


回答:

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 接口方法。

以上是 java jna 动态库从资源路径载入问题? 的全部内容, 来源链接: utcz.com/p/945413.html

回到顶部