1

我正在尝试运行使用 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:你可以从这里得到。

4

2 回答 2

2

_fann_create_standard_array 末尾的“@8”表示该库正在使用 stdcall 调用约定,因此您的库接口需要实现该接口 (StdCallLibrary),它将自动获取应用的函数名称映射器,将您的简单 java 名称转换为装饰的 stdcall 一。

这在 JNA 文档中有所介绍。

于 2011-07-01T11:12:10.953 回答
0

这是我第一次不得不与 FANN 合作,我花了一些时间才让它发挥作用。

  1. 下载范恩 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 + ",");
        }
    }
    

    }

于 2012-11-01T14:20:35.800 回答