尝试在 Mac OS X 上加载 JNA 库时出现“无法加载库:资源路径中未找到 JNA 本机支持”

问题描述 投票:0回答:1

我有一个像这样的 JNA 库存根:

public interface FREngine extends Library {
    NativeLibrary JNA_NATIVE_LIB = NativeLibrary.getInstance("FREngine");
    FREngine INSTANCE = (FREngine) Native.loadLibrary("FREngine", FREngine.class);
}

如果我尝试以任何方式使用这个库,我会得到一个非常令人困惑的错误:

java.lang.UnsatisfiedLinkError: Unable to load library 'FREngine': 
    JNA native support (darwin/libFREngine.jnilib) not found in resource path 
    (...entire classpath here...)

为什么这让我感到困惑:

  • .jnilib 是 JNI 库的文件扩展名。因为我使用的是 JNA,所以我不希望 JNA 使用除它自己的库“jnidispatch”之外的任何 JNI 库。
  • JNA 正在寻找这个文件的类路径,但是根本不可能它会在那里,因为它只是我试图导入的一些随机库。不应该在看
    DYLD_FRAMEWORK_PATH
    吗?
  • 以完全相同的方式初始化的其他本地库工作正常。例如,可以解析 CoreFoundation。除了库的名称不同外,它加载库的代码是相同的。

我尝试查看框架本身,但只能看到细微差别:

  • FREngine.framework
    /Library
    CoreFoundation.framework
    /System/Library
  • FREngine.framework/Versions
    包含一个目录,其名称比
    CoreFoundation.framework
    更长更复杂,它只有一个版本称为
    A
    .
  • FREngine.framework/Versions/[ver]
    包含
    Headers
    Libraries

使用的JNA版本是3.5.2。我们无法升级到 4.x,因为还有一些其他错误会在我们尝试加载本机库时立即导致异常。

java macos frameworks native jna
1个回答
0
投票

在错误的引擎加载方法下,FREngine 库在这种情况下不起作用的原因。 FREngine 预计只能通过 com.abbyy.FREngine 加载。

© www.soinside.com 2019 - 2024. All rights reserved.