AWS Lambda / JNI - попытка заставить его работать со встроенными нативными файлами - PullRequest
0 голосов
/ 22 мая 2019

моему консольному приложению (проекту Java Maven) требуется JAR-зависимость, для работы которой необходимы нативные *.so файлы.

Я нахожусь под Linux, и единственный способ заставить мое приложение работать - это установить переменную среды LD_LIBRARY_PATH с абсолютным путем к собственным файлам *.so.

Моя проблема: Мне нужно преобразовать консольное приложение в AWS Lambda , поэтому мне нужно встроить собственные *.so файлы.

Попытки:

  1. Я поместил нативные файлы *.so в папку Maven resources моего проекта. Но это не сработало.
  2. Я изменил свою стратегию, распаковав мою JAR-зависимость, поместив собственные файлы *.so в корень, воссоздав JAR-зависимость с помощью утилиты jar (внутренняя архитектура в порядке). Но это тоже не сработало:
Exception in thread "main" java.lang.UnsatisfiedLinkError: com.filepool.natives.FPLibraryNative.setLastError(I)V
    at ...

N.B:

  • Я думал, -Djava.library.path будет похоже на экспортированную переменную окружения LD_LIBRARY_PATH, но -Djava.library.path не работает.
  • Когда я декомпилирую зависимость JAR, я вижу блок static, который имеет System.loadLibrary("somelibname");, поэтому размещение собственных файлов *.so в пути к классам должно работать (я думаю), но это не

Вопросы:

  1. Я что-то не так сделал?
  2. Есть ли у вас какие-либо предложения о том, как заставить его работать с AWS Lambda?

1 Ответ

0 голосов
/ 24 мая 2019

Каждый раз, когда вы покидаете JVM, вы теряетесь, когда дело доходит до java.library.path. У вас есть несколько вариантов здесь.

Вместо связи с -L/path -lsome_lib вы можете использовать

-Wl,-rpath,/some/fixed/location -L/some/fixed/location -lsome_lib

Другой вариант - использовать явное расположение библиотеки внутри вашего Java-кода. Вместо использования: System.loadLibrary вы можете использовать System.load и указать точное местоположение библиотеки.

Посмотрите здесь: https://github.com/mkowsiak/jnicookbook/tree/master/recipeNo031, где я покажу, как извлечь библиотеку из файла JAR и загрузить ее в код Java.

...