gpt4 book ai didi

java - 从 jar 加载 .so 文件

转载 作者:行者123 更新时间:2023-11-30 15:28:19 27 4
gpt4 key购买 nike

我用 C 语言创建了一个库,并使用 JNI 从 Java 调用它,因此我有我的包和一个包含 libMYLIB.so 文件的 lib 文件夹。我记得 Java 写作中是这样的:

static{
System.loadLibrary("MYLIB");
}

如果我使用选项 -Djava.library.path=../lib 执行它,它会很好地工作。

但是我需要用我的包和lib文件夹创建一个jar文件;所以我制作了它并导入到一个更复杂的项目中。

在大型项目中,可以看到并使用我的包中的类,但在运行时 Java 无法加载 MYLIB。

是否可以告诉Java从jar文件加载它?怎么办?

最佳答案

首先,我们需要确保 JAR 文件位于类路径中。然后,这是加载库的简单方法,假设它位于 JAR 中的 /com/example/libMYLIB.so 下:

    InputStream is = ClassLoader.class.getResourceAsStream("/com/example/libMYLIB.so");
File file = File.createTempFile("lib", ".so");
OutputStream os = new FileOutputStream(file);
byte[] buffer = new byte[1024];
int length;
while ((length = is.read(buffer)) != -1) {
os.write(buffer, 0, length);
}
is.close();
os.close();

System.load(file.getAbsolutePath());
file.deleteOnExit();

但这掩盖了 Loader 中 JavaCPP 涵盖的许多极端情况和可移植性问题。类。

关于java - 从 jar 加载 .so 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26652014/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com