JavaCPP - как на самом деле генерировать оболочки JNI C++?

Я пытаюсь использовать JavaCPP для создания привязок Java для некоторой библиотеки C++. Процесс имеет 2 аспекта

  • Необходимо создать общую библиотеку Linux (.so), содержащую собственные точки входа (JNIEXPORT). Так получилось, что моя библиотека только для заголовков, поэтому я просто передаю включения в JavaCPP
  • Java-класс должен быть создан с помощью методов, использующих ключевое слово "native", чьи подписи соответствуют подписям на нативной стороне.

Файл "свойств" Java (часть, которая описывает, как создать.so и как генерировать файл Java), выглядит следующим образом:

@Properties(
    //target = "Client",  // NOTE: with this commented, .so gets built; with it enabled, Java class gets written
    value = @Platform(
        includepath = {"jnigen/src/main/cpp/mpf"},
        include = "ClientWrapper.hpp"
    )
)
public class Mpf implements InfoMapper {
    public void map(InfoMap infoMap) {
        infoMap.put(new Info("mpf::ClientWrapper").pointerTypes("Client"));
    }
}

Проблема в том, что я не могу на всю жизнь генерировать привязки C++. Я знаю, потому что.so не содержит точек входа, глядя на это с nm -D X.so, Если я укажу свойство "target", класс Java будет выведен, что выглядит хорошо, но нет .so, Если я уйду target.so успешно построен, но не имеет привязок. Я также вижу, что он их не получил, передав -nodelete java -jar javacpp.jar поэтому он сохраняет сгенерированные файлы cpp - в них есть только маршаллинг, а не мои вещи (один класс).

Документация по JavaCPP - это кошмар, и шаги настолько запутаны, что я не могу решить это. Предложения по альтернативным библиотекам также приветствуются. Благодарю.

0 ответов

Новая вики-страница Mapping Recipes for C/C++ Libraries должна прояснить все это, но дайте мне знать, если что-то еще неясно, и я приведу здесь дополнительную точность.

В этом случае мы могли бы вызвать JavaCPP на Mpf с @Properties(target="Client", ...) набор значений, создание класса с именем ClientТаким образом, серия команд будет выглядеть так:

$ javac -cp javacpp.jar Mpf.java
$ java -jar javacpp.jar Mpf
$ javac -cp javacpp.jar Client.java
$ java -jar javacpp.jar Client
Другие вопросы по тегам