Вызов функций C ++ из Java - PullRequest
       3

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

10 голосов
/ 11 апреля 2011

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

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

Ответы [ 3 ]

17 голосов
/ 12 апреля 2011

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

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

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

6 голосов
/ 12 апреля 2011

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

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

3 голосов
/ 18 апреля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...