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