Java System.loadLibrary зависимости - PullRequest
6 голосов
/ 13 декабря 2010

Используемый мной сторонний jar-файл пытается загрузить собственную библиотеку с помощью System.loadLibrary. Я думаю, что происходит то, что одна из загружаемых библиотек зависит от другой нативной библиотеки. Указание -Djava.library.path в этом случае не работает должным образом. Инструкции с сайта приложения помещают dll в каталог jre / bin, но я думаю, что это действительно плохая идея (особенно при попытке развертывания на клиентских сайтах).

Итак, этот вопрос на самом деле состоит из 2 частей.

  1. Имеет ли смысл, что если нативная библиотека пытается загрузить другую нативную библиотеку, то -Djava.library.path не работает?

  2. Есть ли хорошее решение для решения этой проблемы? Я думаю, я мог бы явно вызвать System.loadLibrary для всех библиотек DLL (я даже не уверен, сработает ли это), но мне нужно было бы убедиться, что они вызываются в правильном порядке, иначе у меня возникнет та же проблема.

РЕДАКТИРОВАТЬ: Я думаю, что это имеет смысл, что это происходит, и лучшее решение, которое я читал до сих пор, это использовать средство обхода зависимостей, чтобы выяснить это, а затем загрузить их в обратном порядке ... но я открыт для лучшие предложения ...

спасибо, Джефф

1 Ответ

4 голосов
/ 13 декабря 2010

Да, имеет смысл, что нативные библиотеки не используют свойство Java -Djava.library.path для ссылки на другие нативные библиотеки.

Некоторые возможные подходы:

  • Сторонний jar исправлен для загрузки своих собственных зависимостей, полагаясь на java.library.path.
  • Ваш код загружает библиотеки DLL, требуемые сторонним jar, в обратной топографической сортировке. Однако это заставляет ваш код указывать зависимости стороннего jar-файла. Эти зависимости могут измениться.
  • Вы используете специфический для ОС путь поиска DLL (например, используя LD_LIBRARY_PATH в Unix / Linux / Mac или PATH в Windows). Однако для этого может потребоваться сценарий запуска.
...