使用JNA加载多个依赖库

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)相同的目录中时,才需要调用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"); }