JNA中有没有办法用Java加载多个依赖库?
我通常使用Native.loadLibrary(...)
加载一个 DLL。但我猜它不会以这种方式工作,因为我将此函数调用分配给实例成员。
假设我有图书馆foo
和图书馆bar
. bar
依赖于foo
;它也依赖于baz
,我们是not与 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();
}
致电给System.load/loadLibrary
仅当有必要时baz
不在您的库加载路径上(PATH
/LD_LIBRARY_PATH
,分别适用于 windows/linux)也不在同一目录中bar
(仅限 Windows)。
EDIT
您还可以通过接口映射来做到这一点:
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");
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)