Включение библиотеки * .SO в проект Java (Linux) - PullRequest
0 голосов
/ 13 сентября 2018

Я не Java-разработчик, но мне нужно решить проблему: мне нужно включить библиотеку linux SO в существующий Java-проект.Библиотека разработана с использованием CGO и прекрасно работает с C ++, Python ctypes, Ruby FFI и так далее.Но я не могу включить его в проект Java без ошибок (java.lang.UnsatisfiedLinkError).Я прочитал несколько статей, таких как this , и описанный метод заключается в том, что мне нужно сначала использовать javah для создания заголовка C, а затем написать программу на C и так далее.Но что делать, если я уже скомпилировал * .SO файл?Есть ли способ, как просто загрузить существующий SO-файл (написанный на C) и вызвать его функции?

1 Ответ

0 голосов
/ 13 сентября 2018

Java не имеет встроенной функциональности FFI.

Один из вариантов использования собственных библиотек (.dll / .so) с Java - это написание библиотеки-оболочки JNI, которая имеет специальные функции, которые могут быть связаны с Java.родные методы.Это опция, где вам нужно использовать javah для создания заголовочного файла для библиотеки-оболочки.Чтобы узнать, как это сделать, см. Документацию «Собственный интерфейс Java» на сайте Oracle.

Другой подход заключается в использовании «склеенной» библиотеки, такой как JNA .Вам не нужно создавать другую библиотеку таким образом, но вам нужно включить JNA в ваш проект и сделать необходимые декларации Java для него.Вы можете найти документацию для JNA в репозитории Github вместе с кодом.Этот подход аналогичен тому, что делают Python, Ruby и т. Д.

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

...