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