Короче говоря: у меня есть исполняемая банка, которая вызывает 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()
, что отрицает необходимость копирования файлов.