У меня есть следующая собственная функция Java
private static native void fillEnergyArrays(double currentTemp, double concNA, double concMG);
Функция реализована на C. Код был протестирован, и я создал работающую динамическую библиотеку libhyfiModel.jnilib, которую можно использовать для вызова метода из Java-файла Temp.java. Никаких проблем в этом случае, когда я запускаю программу с одним файлом. Вызов метода работает и возвращает ожидаемое значение.
Проблема:
Я беру Temp.java и libhyfiModel.jnilib и пытаюсь импортировать их в большой проект IntelliJ IDEA, который использует Maven в качестве менеджера сборки. Я поместил свой файл libhyfiModel.jnilib в правильный каталог, чтобы он загружался при выполнении программы. Я дважды проверил, что он загружается с помощью этого кода в Temp.java:
static {
try {
System.loadLibrary("hyfiModel");
}
catch (UnsatisfiedLinkError e) {
System.err.println("Native code library failed to load\n" + e);
}
}
Здесь не выдается исключение, поэтому libhyfiModel.jnilib найден и загружен правильно, но при выполнении собственного метода я получаю следующую ошибку:
Исключение в потоке «основной» java.lang.UnsatisfiedLinkError: ca.virology.baseByBase.DiffEditor.fillEnergyArrays(DDD)V в ca.virology.baseByBase.DiffEditor.fillEnergyArrays(собственный метод) в ca.virology.baseByBase.DiffEditor.main( DiffEditor.java:266)
Я просмотрел документацию здесь https://www.jetbrains.com/idea/help/configuring-module-dependencies-and-libraries.html и безуспешно следовал инструкциям.
Итак, динамическая библиотека загружается, и я добавил каталог, содержащий libhyfiModel.jnilib, в качестве зависимости, но метод не может быть выполнен... Что мне не хватает?
ИЗМЕНИТЬ:
Я создал новый проект IntelliJ только с Temp.java, и я могу вызывать нативную функцию без ошибок, поэтому я думаю, что должна быть проблема с конфигурациями моего проекта. Есть специалисты по IntelliJ?