Загрузка JNI lib в Mac OS X? - PullRequest
       38

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

6 голосов
/ 31 марта 2010

Фон

Итак, я пытаюсь загрузить 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());

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

    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, который вызывается во время выполнения?

Ответы [ 3 ]

2 голосов
/ 31 марта 2010

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

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

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

1 голос
/ 04 апреля 2010

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

0 голосов
/ 31 марта 2010

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

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

...