"无法加载库:资源路径中找不到JNA本机支持"试图在Mac OS X上加载JNA库

时间:2014-04-24 07:16:28

标签: java macos frameworks native jna

我有一个像这样的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使用任何JNI库,而不是它自己的JNI库,“jnidispatch”。
  • JNA正在寻找这个文件的类路径,但是没法在地狱它会在那里,因为它只是我试图导入的一些随机库。不应该看DYLD_FRAMEWORK_PATH
  • 以完全相同的方式初始化的其他本机库工作正常。例如,可以解决CoreFoundation。它的加载库的代码与库不同的名称相同。

我尝试自己查看框架,只能看到细微差别:

  • FREngine.framework位于/LibraryCoreFoundation.framework位于/System/Library
  • FREngine.framework/Versions包含一个名称比CoreFoundation.framework更长,更复杂的目录,该目录只有一个名为A的版本。
  • FREngine.framework/Versions/[ver]包含HeadersLibraries

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

1 个答案:

答案 0 :(得分:0)

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