Как загрузить библиотеку, которая зависит от другой библиотеки, всех из файла банки

Я хотел бы поставить свое приложение как автономный файл банки. Файл банки должен содержать все файлы класса, а также две общих библиотеки. Одна из этих общих библиотек записана для JNI и является по существу косвенностью к другой одной (который составляет 100% C).

Я сначала попытался выполнить свой файл банки без библиотек, но иметь их доступный через переменную среды LD_LIBRARY_PATH. Это хорошо работало.

Я затем поместил библиотеку JNI в файл банки. Я читал о загружающихся библиотеках из файлов банки путем копирования их сначала в некоторый временный каталог, и это работало хорошо на меня (обратите внимание, что 100%-я библиотека C была, я предполагаю, загруженный как прежде).

Теперь я хочу поместить обе библиотеки в банку, но я не понимаю, как я могу удостовериться, что они будут оба загружены. Уверенный я могу скопировать их обоих во временный каталог, но когда я загружаю "косвенность" один, она всегда дает мне:

java.lang. UnsatisfiedLinkError:/tmp/.../libindirect.so:/libpure.so: не может открыть файл общего объекта: Никакой такой файл или каталог

Я попытался вынудить JVM загрузить "100% C" библиотека сначала explicitely, называющим System.load (...) на его временном файле, но это не работало лучше. Я подозреваю, что система ищет его при разрешении ссылок в libindirect.so, но не заботится о какой загруженная JVM.

Кто-либо может помочь мне на том?

Спасибо

6
задан Philippe 4 June 2010 в 16:07
поделиться

1 ответ

Один из способов - породить другой Java-процесс из первого, сгенерировав соответствующий сценарий вызова.

  1. jar вызывается пользователем
  2. Библиотеки извлекаются в каталог temp
  3. В каталог temp записывается скрипт (bash)
    • Это устанавливает/экспортирует необходимые переменные окружения
    • Это запускает второй экземпляр JRE
  4. Код делает скрипт исполняемым
  5. Код вызывает скрипт

Я знаю, порождение двух экземпляров JRE для запуска одного приложения тоже не было бы моим первым выбором.

2
ответ дан 17 December 2019 в 20:29
поделиться
Другие вопросы по тегам:

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