Swig работает очень хорошо. Это средство привязать C / C ++ к огромному количеству языков. У меня есть опыт использования этого, чтобы разговаривать с C ++ без особых проблем. Вот страница руководства по совместному использованию Swig и Java. В учебном пособии вы очень быстро начнете работу с множеством примеров, включая Java.
Однако я бы исследовал разделение вашего приложения на архитектуру клиент / сервер, чтобы отделить серверную часть C ++ от клиентской части Java. Вы избежите проблем с разработкой и интеграцией C ++ / Java = хотя вам придется реализовать некоторый протокол связи между интерфейсом и сервером в зависимости от требований (например, базовые сокеты / веб-сервис / HTTP + REST или, возможно, CORBA, который изначально входит в Java и предназначен для межъязыкового общения).
Предполагая, что серверный компонент находится на том же компьютере, вы можете использовать уровень интерфейса, как описано другими
Все это требует, чтобы ваш бэкэнд C ++ был доступен в dll и обычно предоставлял прокси Java для функций C, а иногда и классов C ++. Все это требует обучения и работы по включению прокси.
Другой подход - использовать процесс C ++ и взаимодействовать с ним, используя либо
Если вы хотите поддерживать связь по сети
У них также есть кривая обучения и некоторые затраты на установку
Из них командная строка или stdin / stdout, вероятно, являются самыми быстрыми для начала работы с минимальным количеством усилий и знаний. Однако он плохо масштабируется для больших интерфейсов, так как вы должны кодировать ввод и вывод каждого сообщения как текст
. Для подхода с использованием командной строки вы выполняете процесс c ++, используя параметры командной строки для параметров, результаты либо считываются из стандартный выход процессов или его код выхода.
Как насчет Thrift ?
Thrift - это программная среда для масштабируемой разработки межъязыковых сервисов. Он сочетает в себе программный стек с механизмом генерации кода для создания сервисов, которые эффективно и без проблем работают между C ++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C #, Cocoa, Smalltalk и OCaml.
Если вы не пишете внутреннюю библиотеку C ++ самостоятельно, а просто хотите использовать стороннюю библиотеку, лучшей альтернативой будет использовать JNA .
Основное преимущество использования JNA по сравнению с JNI в этом случае состоит в том, что весь код моста написан на Java (а не на собственном языке, C ++ в вашем случае). Это означает, что вам не нужно будет усложнять процесс сборки, создавая интерфейсы C ++ JNI, вся работа с интерфейсом будет написана на языке основного проекта.
Однако если вы сами пишете бэкэнд C ++, тогда любой из другие варианты, уже представленные, также применимы.