Библиотека 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: вы можете получить здесь.
2 ответа
"@8" в конце _fann_create_standard_array указывает на то, что библиотека использует соглашение о вызовах stdcall, поэтому интерфейсу вашей библиотеки необходимо реализовать этот интерфейс (StdCallLibrary), и он автоматически получит преобразователь имени функции, который преобразует ваше простое имя java в украшенный stdcall один.
Это описано в документации JNA.
Это был первый раз, когда мне пришлось работать с FANN, и мне потребовалось некоторое время, чтобы заставить его работать.
- Скачал Fann 2.2.0. Извлеките (в моем случае "C:/FANN-2.2.0-Source") и проверьте путь к файлу fannfloat.dll. Это библиотека, которую мы будем использовать позже.
- Загрузите fannj-0.6.jar с http://code.google.com/p/fannj/downloads/list.
- DLL скомпилирована для 32-битной среды. Итак, убедитесь, что у вас установлена 32-битная Java (даже в 64-битной Windows).
Я полагаю, у вас уже есть файл.net с вашим ANN. Напишите что-нибудь подобное на 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 + ","); } }
}