java - "Unable to load library: JNA native support not found in resource path"尝试在 Mac OS X 上加载 JNA 库

标签 java macos frameworks native jna

我有一个像这样的 JNA 库 stub :

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 上查找吗?
  • 以完全相同的方式初始化的其他 native 库工作正常。比如CoreFoundation就可以解决。除了库的名称不同之外,其加载库的代码是相同的。

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

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

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

最佳答案

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

关于java - "Unable to load library: JNA native support not found in resource path"尝试在 Mac OS X 上加载 JNA 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23262313/

相关文章:

java - Android:摩托罗拉 MC40 设备无法识别用于调试应用程序

java - 从源代码构建 Elasticsearch,但它需要 Java 10

macos - 用于最大化窗口任务的 Mac OSX 守护进程

python - 适用于 Python 3 的 Jupyter Notebook 中出现 ModuleNotFoundError,但不适用于 Python 2 (Mac OSX)

java - 什么是好的安全框架或 API?

java - 以通用方式重试方法调用

java - 如何从 JSTL 转换为字符串?

java - 在 Android studio 中使用 otf 字体

c++ - 如何在 Mac OSX 上的窗口客户端中获得真实的鼠标位置?

ios - Xcode Frameworks 文件夹类引用不起作用?