java - 加载jar附带的JNA库

标签 java classloader jna

我尝试在 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/

相关文章:

java - 在运行时加载jsp所需的库

java - JNA 加载失败,UnsatisfiedLinkError, "Access Denied"

java - setProgressImgView 处出现 NullPointerException

java - Spring表单标签和模型绑定(bind)转义

javascript - 安装node-java时出现LNK2001错误

java - Ant 错误 "Exception in thread "AWT-EventQueue- 0"java.lang.NoClassDefFoundError: com/sun/jna/Library"

java - JNA 将 Java String 映射到 PCWSTR

java - 已弃用的认可标准覆盖机制和扩展机制的替代方案

java - 为什么这个类可以被Java类加载器加载两次?

java - 什么被认为是 Java 核心模块?