Короче говоря: у меня есть исполняемая банка, которая вызывает jni.dll, которая зависит от lib.dll. И я получаю о-о-боязнь UnsatisfiedLinkError.
Есть ли какой-нибудь "симпатичный" способ исправить это? Я хочу создать установщик для Windows, и мне интересно, как я буду справляться с этой проблемой, чтобы конечный пользователь не должен был выполнять какую-либо ручную работу.
EDIT:
Я реализовал следующее: приложение поставляется с папкой "native_libs", которая имеет динамические библиотеки для всех поддерживаемых архитектур. Структура следующая:
/
+- native_libs/
+- windows/
| +- x86/
| | +- ...
| +- x64/
| +- ...
|
+- linux/
| +- x86/
| | +- ...
| +- x64/
| +- ...
|
+- libs/
+- ...
Во время выполнения, в то время как приложение инициализируется, обнаруживаются правильная архитектура JRE и системная ОС и файлы библиотеки копируются в папку libs/. java.library.path также устанавливается во время выполнения, используя обычный хак. Наконец, переменная среды PATH для окон устанавливается с помощью встроенного средства запуска.
Есть ли возможности для улучшения? Возможно, копирование dll в том же каталоге, что и файл jar, будет отрицать необходимость установки переменных java.library.path и PATH? Мне нужно также изучить загрузку dll с помощью System.load(), что отрицает необходимость копирования файлов.