开发者

fannj library doesn't work

I'm trying to run project which uses fannj library, but I'm getting error:

    Exception in thread "main" java.lang.UnsatisfiedLinkError: Error looking up function 'fann_create_standard_array':
    at com.sun.jna.Function.<init>(Function开发者_如何学Go.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

This is what I did:

  • I put fannfloat.dll to C:\Windows\System32
  • I added fannj-0.3.jar to project
  • I added newest jna.jar to project

here is code:

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 is file from example package. fannfloat.dll: you can get from here.


The "@8" at the end of _fann_create_standard_array indicates that the library is using the stdcall calling convention, so your library interface needs to implement that interface (StdCallLibrary) and it will automatically get the function name mapper applied that converts your simple java name to the decorated stdcall one.

This is covered in the JNA documentation.


It was the first time I had to work with FANN and it took me some time to make it work.

  1. Downloaded Fann 2.2.0. Extract (in my case "C:/FANN-2.2.0-Source") and check the path of the fannfloat.dll file. This is the library that we will use later.
  2. Download fannj-0.6.jar from http://code.google.com/p/fannj/downloads/list.
  3. The dll is compiled for 32 bit environment. So, make sure you have a 32 bit Java installed (even in 64 bit Windows).
  4. I suppose you already have the .net file with your ANN. Write something like this in 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 + ",");
        }
    }
    

    }

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜