当前位置: 首页 > 知识库问答 >
问题:

用JNA加载多个依赖库

贺景胜
2023-03-14

我通常使用native.loadLibrary(...)加载一个DLL。但是我想它不是这样工作的,因为我把这个函数调用分配给了实例成员。

共有1个答案

沈永新
2023-03-14

假设我有库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");
}
 类似资料:
  • 我想加载一个.dll文件(SimpleDll.dll格式为jna教程),但我得到了 UnsatisfiedLinkError:无法加载库“Simple DLL”:找不到指定的模块。 我在ubuntu下用wine运行java程序,得到了以下信息: 错误:模块:import_dll库msvcr100d.dll(需要... 在Eclipse中运行程序时没有显示此消息,所以我的问题是: 有没有办法为JNA

  • 我有一个Advision类,它使用了代理jar中的另一个类,但这个类依赖于代理jar中不存在的一个类。代理jar中不存在的这个类存在于应用程序类加载器上的另一个jar中。代理jar位于系统类加载器上。所以我没有遇到ClassDefounderRor。我已经尝试使用Transformer.forAdvise,这是在另一篇文章中建议的,但这只适用于Advise类。

  • 我将通过JNA访问msp430.dll(参见此处)。但该库与其他本地库有依赖关系,这些本地库与MSP430.dll捆绑在一起。这个依赖的本机库称为hil.dll。使用jna.library.path后,所有的工作都非常出色。现在我会将本地库绑定到我自己的.jar包中。然后我将使用从JNA框架的jar自动加载本机库。但这会给具有依赖关系的本地库带来问题。如果我将msp430.dll和hil.dll打

  • 我在过去使用引导日期选择器,它有一个选项,让一个月的日历保持静态(内联),如图所示。 我现在正在使用React(我对它还很陌生),需要一个日期选择器。我决定使用react引导日期选择器,但是react引导日期选择器没有内联选项。 我不想大量侵入react引导数据采集器的css,在react上加载jQuery依赖库(如引导数据采集器)的最佳方法是什么?这会是坏习惯吗? 下面是用于加载bootstra

  • 我加载适配器。所以这将适用于另一个 图书馆平铺 用此java编译的jar(1.7.0_79 64位)

  • 问题内容: 我一直在尝试建立一个自定义的类加载器,该类加载器将拦截类以打印出哪些类正在加载到应用程序中。类加载器看起来像这样 它只是吐出它加载的所有类的名称。但是,当我尝试运行一些代码时, 通过 它打印出来 这似乎很奇怪。这不是一个简单的类,它取决于程序包中的许多其他类。这些类显然正在加载中,因为d python代码能够执行操作并读取我的文件。但是,由于某些原因,那些类并未由load的类加载器加载