JNA 有没有办法用 Java 加载多个依赖库?
我通常Native.loadLibrary(...)
用来加载一个 DLL。但我想它不会以这种方式工作,因为我将此函数调用分配给了实例成员。
假设我有 libraryfoo
和 library 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();
}
Run Code Online (Sandbox Code Playgroud)
System.load/loadLibrary
仅当baz
既不在您的库加载路径(PATH
/ LD_LIBRARY_PATH
,分别用于 windows/linux )也不在与bar
(仅限 windows)相同的目录中时,才需要调用。
编辑
你也可以通过接口映射来做到这一点:
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");
}
Run Code Online (Sandbox Code Playgroud)