2010-12-13 1 views
6

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

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

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

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

EDIT: Я думаю, что это имеет смысл, что это происходит, и самое лучшее решение, которое я читал до сих пор использовать зависимость ходок, чтобы понять его, а затем загрузить их в обратном порядке ... но я «м открыты для лучшего предложения ...

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

ответ

4

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

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

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

Я попробовал загрузку в обратном порядке, и это действительно сработает, поэтому, возможно, я буду использовать этот подход, если не будет какого-то магического решения, которого у меня нет. –

+0

Это, вероятно, то, что я бы сделал, а также, возможно, представив дефект третьей стороне. Если вы используете кросс-платформенное программное обеспечение, динамически связанные библиотеки могут отличаться между платформами. Удачи! –