我有一个像这样的 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/