我有一個JNA庫存根這樣的:「無法加載庫:JNA原生支持不是在資源路徑中找到」對試圖在Mac OS X裝載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
是/Library
,CoreFoundation.framework
是/System/Library
FREngine.framework/Versions
包含一個目錄具有更長,更復雜的名字比CoreFoundation.framework
,它只有一個版本叫做A
。FREngine.framework/Versions/[ver]
包含Headers
和Libraries
JNA的正在使用的版本是3.5.2。我們無法升級到4.x,因爲在我們嘗試加載我們的本地庫時,有一些其他的錯誤會導致異常。
看起來你的JNA有點過時;這個錯誤有點讓人誤解(當它指向你的庫時,說「JNA原生支持」)。你使用的是什麼JVM/JNA版本? – technomage
下週我會檢查它(現在是公衆假期......)但是我知道我們有些過時,因爲當我去調試器中進行調查時,發現我們使用的版本稍微老一點比我有的來源。 – Trejkaz