Я хотел бы поставить свое приложение как автономный файл банки. Файл банки должен содержать все файлы класса, а также две общих библиотеки. Одна из этих общих библиотек записана для 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.
Кто-либо может помочь мне на том?
Спасибо
Один из способов - породить другой Java-процесс из первого, сгенерировав соответствующий сценарий вызова.
Я знаю, порождение двух экземпляров JRE для запуска одного приложения тоже не было бы моим первым выбором.