Я скомпилировал приложение Java (JAR), которое отлично работает на моей машине Mac OS. Он использует JNI для вызова скомпилированной библиотеки C-Shared и использует jnr-ffi для загрузки этого собственного кода.Невозможно загрузить приложение JNI, связанное с Raspberry Pi
Я получаю кучу ошибок, которые возникают из-за попытки инициализации jnr-ffi. Похоже, что должны быть некоторые jni-файлы, которые должны существовать в системе как часть установки Java, но они не существуют.
Я не могу скопировать StackTrace дословно, но вот некоторые из ошибок, которые должны быть полезны:
Exception in thread "main" j.l.UnsatisfiedLinkError: could not load FFI provider jnr.ffi.provider.jffi.provider
Another unsatisfied link error below: /tmp/...gibberish..so cannot open shared object file: no such file or directory.
Another unsatisfied link error: Can't load library: /usr/lib/libjffi-1.2so
В основном кучу ошибок, связанных загрузки нативного кода.
Это не стоит также ничего, что я извлек JAR, что я пытаюсь запустить, и он содержит кучу папок, такие как arm-Linux
, Darwin
, i386-Linux
, и файл libjffi-1.2.so
Так это выглядит, как файлы существует в ЕАО но во время выполнения у jave возникают проблемы с их поиском.
Я не могу понять, как это исправить, и это сработало на моей другой машине. Как исправить?
Я пробовал работать с sudo
.
Спасибо, я попробую это. Но, с помощью поиска в каталоге/tmp со случайным именем filename.so? – conor
Одним из путей поиска в исключении является допустимый путь. Почему это? – conor
Java имеет концепцию временной папки. В исходном коде java программист может попытаться разрешить библиотеку. Возможно, он пытается распаковать некоторый архив, содержащий библиотеку в папке tmp, но поскольку архив не существует, извлеченный файл не будет существовать. (просто huessing здесь) – snovelli