Загрузка lib JNI на Mac OS X?

Фон

Таким образом, я пытаюсь загрузить jnilib (конкретно JOGL) в Java на Mac OS X во времени выполнения. Я следовал вдоль соответствующих вопросов о Переполнении стека:

Конечная цель для меня должна упаковать платформу определенные файлы JOGL в JAR и разархивировать их во временный каталог и загрузить их при запуске. Я работал своя проблема назад к простой попытке загрузить JOGL использование трудно кодированных путей:

    File f = new File("/var/folders/+n/+nfb8NHsHiSpEh6AHMCyvE+++TI/-Tmp-/libjogl.jnilib");
    System.load(f.toString());
    f = new File ("/var/folders/+n/+nfb8NHsHiSpEh6AHMCyvE+++TI/-Tmp-/libjogl_awt.jnilib");
    System.load(f.toString());

Я получаю следующее исключение при попытке использовать API JOGL:

    Exception in thread "main" java.lang.UnsatisfiedLinkError: no jogl in java.library.path

Но когда я указываю java.library.path путем добавления следующей опции JVM:

    -Djava.library.path="/var/folders/+n/+nfb8NHsHiSpEh6AHMCyvE+++TI/-Tmp-/" 

Все хорошо работает.


Вопрос

Это - возможное применение System.load (или некоторый другой вариант) на Mac OS X как замена для-Djava.library.path, который вызывается во времени выполнения?

6
задан Community 23 May 2017 в 11:53
поделиться

3 ответа

Jogl всегда пытается автоматически загрузить все зависимые библиотеки. Чтобы избежать этого, должен быть класс NativeLibLoader, в котором вы можете вызвать disableLoading ( ) перед загрузкой библиотек самостоятельно через System.load ()

1
ответ дан 18 December 2019 в 04:52
поделиться

System.load (...) принимает имя библиотеки в качестве аргумента. Путь к библиотеке не используется в качестве аргумента. JVM ищет библиотеку с указанным именем в списке путей, указанных в -Djava.library.path;

Здесь нет ничего специфического для Mac OS X. Он ищет библиотеки одинаково во всех операционных системах.

-3
ответ дан 18 December 2019 в 04:52
поделиться

Вам не обязательно предоставлять java.library.path при запуске. Вы можете программно задать его с помощью

System.setProperty("java.library.path", "/var/folder/bla/foo/bar/");

Не знаю, будет ли System.load() как-то работать без этого пути к библиотеке.

2
ответ дан 18 December 2019 в 04:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: