JNA有没有办法用Java加载多个依赖库?
我通常使用 Native.loadLibrary(...)
加载一个 DLL。但我猜它不会以这种方式工作,因为我将此函数调用分配给了实例成员。
最佳答案
假设我有库 foo
和库 bar
。 bar
依赖于 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/