使用JNA加载多个依赖库
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)相同的目录中时,才需要调用System.load/loadLibrary
。
编辑
您也可以通过界面映射来完成此操作:
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"); }