我尝试在 java 库(例如 project A
)中包含 native 库(Linux 共享库 myLib.so
),该库使用 maven 打包到 jar 中。我将 native 库作为资源添加到 jar 中(jar 中的顶层)。
现在我尝试在另一个项目(项目 B
)中使用这个库。当我通过 Java 库调用对象上的方法时,它找不到该库。
在项目 B 中,我称之为类似
org.projectA.MyObject.initLib();
项目 A
中的 MyObject
需要访问库:
public static void initLib() {
MyLib lib = (myLib) Native.loadLibrary("myLib.so"),MyLib.class);
}
那么,我可以将共享库与我的 jar 一起发送,还是需要使用变通办法,例如将资源作为流获取并首先将其写入文件系统?
最佳答案
您必须先从 JAR 中提取它并将其写入临时目录。操作系统不会让您从内存加载共享库,除非您编写自己的 PE/ELF 加载程序。
关于java - 加载jar附带的JNA库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38248983/