gpt4 book ai didi

java - 使用相对路径名从不同目录加载 JNI 库的可移植语句?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:08:52 24 4
gpt4 key购买 nike

是否有独立于平台的 Java 语句从不同于 Java 源代码所在的目录加载 native 库?我想使用这样的东西:

public class HelloWorld {
static {
System.loadLibrary("../some_project/HelloWorld");
}

public static native void print();
}

问题是 System.loadLibrary() 不支持路径名参数中的目录分隔符。另外,不幸的是,System.load() 需要一个绝对路径名,这不仅意味着我不能像上面那样指定一个相对目录(我想这样做),而且还需要参数包含,例如,前面的Linux 系统上 JNI 库名称的“lib”和“.so”扩展名。

是否有处理此问题的标准方法?如果可能的话,我想避免编写一堆依赖于平台的 Java 代码来构造正确的 JNI 库名称。

最佳答案

我相信您正在寻找 System.mapLibraryName ,这是 ClassLoader.findLibrary 通常使用的方法实现。例如:

File lib = new File("../some_project/" + System.mapLibraryName("HelloWorld"));
System.load(lib.getAbsolutePath());

这将在 Linux 上使用 libHelloWorld.so,在 Windows 上使用 HelloWorld.dll。请注意,某些操作系统支持多种扩展,而 mapLibraryName 只能支持一种设计。我知道的是 MacOS(.dylib 主要是 .jnilib 用于遗留)和 AIX(.a。所以).

关于java - 使用相对路径名从不同目录加载 JNI 库的可移植语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10691718/

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