2014-04-24 35 views
1

我有一個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/LibraryCoreFoundation.framework/System/Library
  • FREngine.framework/Versions包含一個目錄具有更長,更復雜的名字比CoreFoundation.framework,它只有一個版本叫做A
  • FREngine.framework/Versions/[ver]包含HeadersLibraries

JNA的正在使用的版本是3.5.2。我們無法升級到4.x,因爲在我們嘗試加載我們的本地庫時,有一些其他的錯誤會導致異常。

+0

看起來你的JNA有點過時;這個錯誤有點讓人誤解(當它指向你的庫時,說「JNA原生支持」)。你使用的是什麼JVM/JNA版本? – technomage

+0

下週我會檢查它(現在是公衆假期......)但是我知道我們有些過時,因爲當我去調試器中進行調查時,發現我們使用的版本稍微老一點比我有的來源。 – Trejkaz

回答

0

FREngine庫在錯誤的引擎加載方法中無法工作的原因。 FREngine預計只能通過com.abbyy.FREngine加載。

+0

當時我正在調查避免使用,因爲它正在做各種奇怪的東西......無論如何,我懷疑這個問題是從JNA,如上面的評論建議的誤導性錯誤信息的情況。 – Trejkaz

+0

那麼,我有兩個建議。 1)官方。轉到「支持」。 2)實際。轉到C++。 –

相關問題