Вызов функций С++ из Java

Я разрабатываю Java-приложение, в котором мне нужно вызвать некоторые функции С++ (из библиотеки Google Talk libjingle). Цель состоит в том, чтобы запустить все это в Google App Engine (который поддерживает только Python или Java).

Как я могу это сделать?

Ответ 1

Вам нужно определить методы native в вашем java-коде для того, что вы хотите реализовать на С++, и получить прямой доступ к вашему собственному коду. Затем вы запускаете javah в свой код, и он будет генерировать файлы заголовков C для вас, и вам нужно будет предоставить реализации С++.

Собственные методы, которые вы можете вызывать из вашего Java-кода, как и любые другие методы, и все же они будут иметь свою реализацию, написанную на С++, и напрямую общаться с любой другой родной библиотекой.

Затем вам необходимо установить системное свойство java.library.path для включения общих библиотек C/С++, которые вам нужны: в этом случае потребуется библиотека google и ваша библиотека реализации JNI.

Ответ 2

Если библиотека имеет привязки C через DLL/SO, я обычно предпочитаю писать обертки в Java, используя Java Native Access (JNA), а не записывая привязки в C/С++ с помощью Java Native Interface (JNI). Первое легче манипулировать, поскольку доступ JNI к объектам Java - настоящая боль в шее. Тем не менее, это не так очевидно, чтобы обернуть классы С++, используя этот API.

Вы также можете посмотреть Упрощенный Wrapper и генератор интерфейсов (SWIG) для автоматизации части этого процесса!

Ответ 3

Вы не можете запустить собственный код в App Engine - только код JRE. Если вы не избегаете собственного кода, вам нужно будет запустить эту часть своего приложения в другой системе и вызвать его из приложения App Engine - или использовать встроенный XMPP API, в этом случае.