gpt4 book ai didi

java - 使用 JNA 加载多个依赖库

转载 作者:行者123 更新时间:2023-11-29 03:04:54 25 4
gpt4 key购买 nike

JNA有没有办法用Java加载多个依赖库?

我通常使用 Native.loadLibrary(...) 加载一个 DLL。但我猜它不会以这种方式工作,因为我将此函数调用分配给了实例成员。

最佳答案

假设我有库 foo 和库 barbar 依赖于 foo;它还依赖于 baz,我们将其映射到 JNA:

public class Foo {
public static final boolean LOADED;
static {
Native.register("foo");
LOADED = true;
}
public static native void call_foo();
}

public class Bar {
static {
// Reference "Foo" so that it is loaded first
if (Foo.LOADED) {
System.loadLibrary("baz");
// Or System.load("/path/to/libbaz.so")
Native.register("bar");
}
}
public static native void call_bar();
}

仅当 baz 不在您的库加载路径 (PATH/LD_LIBRARY_PATH,分别用于 windows/linux),也不在与 bar 相同的目录中(仅限 windows)。

编辑

你也可以通过接口(interface)映射来做到这一点:

public interface Foo extends Library {
Foo INSTANCE = (Foo)Native.loadLibrary("foo");
}
public interface Bar extends Library {
// Reference Foo prior to instantiating Bar, just be sure
// to reference the Foo class prior to creating the Bar instance
Foo FOO = Foo.INSTANCE;
Bar INSTANCE = (Bar)Native.loadLibrary("bar");
}

关于java - 使用 JNA 加载多个依赖库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32609829/

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