2011-06-21 49 views
2

我試圖運行它採用fannj庫項目,但我發現了錯誤:fannj庫不起作用

Exception in thread "main" java.lang.UnsatisfiedLinkError: Error looking up function 'fann_create_standard_array': 
    at com.sun.jna.Function.<init>(Function.java:179) 
    at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:347) 
    at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:327) 
    at com.sun.jna.Native.register(Native.java:1355) 
    at com.sun.jna.Native.register(Native.java:1032) 
    at com.googlecode.fannj.Fann.<clinit>(Fann.java:46) 
    at javaapplication9.JavaApplication9.main(JavaApplication9.java:14) 
Java Result: 1 

這是我做過什麼:

  • 我把fannfloat .dll文件到C:\ Windows \ System32下
  • 我加fannj-0.3.jar
  • 我加入最新jna.jar項目
項目

這裏是代碼:

public static void main(String[] args) { 
    System.setProperty("jna.library.path", "C:\\Windows\\System32"); 
    System.loadLibrary("fannfloat"); 
    Fann fann=new Fann("D:\\SunSpots.net"); 
    fann.close(); 
} 

SunSpots.net是來自實施例包文件。 fannfloat.dll:you can get from here.

+0

你嘗試過使用DUMPBIN或DLL的一些其他的工具?輸出是什麼? – Abhijith

+0

我用依賴walker打開了fannfloat.dll。有函數fann_create_standard_array,但它看起來像這樣:_fann_create_standard_array @ 8。 :/ – czy

回答

2

的「@ 8」在_fann_create_standard_array結束指示庫使用stdcall調用,所以你的庫接口需要實現該接口(StdCallLibrary),它會自動獲得函數名應用了將你的簡單java名稱轉換爲裝飾stdcall的映射器。

這在JNA文檔中有介紹。

0

這是我第一次和FANN一起工作,花了一些時間才使它工作。

  1. 下載Fann 2.2.0。解壓縮(在我的情況下是「C:/FANN-2.2.0-Source」)並檢查fannfloat.dll文件的路徑。這是我們稍後會用到的圖書館。
  2. http://code.google.com/p/fannj/downloads/list下載fannj-0.6.jar。
  3. 該DLL是爲32位環境編譯的。所以,確保你安裝了32位Java(即使在64位Windows中)。
  4. 我想你已經有了ANN的.net文件。寫這樣的事情在Java中

    public class FannTest { 
    public static void main(String[] args) { 
        System.setProperty("jna.library.path", "C:/FANN-2.2.0-Source/bin"); 
    
        Fann fann = new Fann("C:/MySunSpots.net"); 
        float[] inputs = new float[]{0.686470295f, 0.749375936f, 0.555167249f, 0.816774838f, 0.767848228f, 0.60908637f}; 
        float[] outputs = fann.run(inputs); 
        fann.close(); 
    
        for (float f : outputs) { 
         System.out.print(f + ","); 
        } 
    } 
    

    }