Цель
Предположим, у нас есть большое приложение на C ++, которое выполняет некоторые большие задачи, которые можно выполнять с помощью C ++. Но существует множество логов c, которые мы бы предпочли запускать на JVM.
Проблема
Чтобы протестировать подход, описанный выше, я создал небольшой проект на C ++ с использованием CLion. Сценарий:
Сборка (автоматически с помощью CMake):
- фрагмент кода ссылки с
$JAVA_HOME/lib/jvm.lib
- копирование всех DLL из
$JAVA_HOME
в каталог с только что созданным exe
Выполнить :
- создать встроенную JVM
- вызвать stati c
Я попробовал Visual Studio 2019 Community и MinGW64 (x86_64-8.1.0-posix-seh-rt_v6-rev0), и оба привели к идентичным результатам.
Лучшие результаты, которые я получил с OpenJDK ( jdk-14.0.2 ):
Error occurred during initialization of VM
Failed setting boot class path.
Oracle JDK 1.8 показал немного другую ошибку:
Error occurred during initialization of VM
Unable to load native library: Can't find dependent libraries
Я также пробовал разные версии из ojdkbuild , и лучшее, что я получил, это SEGFAULT при вызове env->FindClass
.
Вопросы
- Какой дистрибутив JVM лучше использовать для встраивания в C ++?
- Как правильно связать и распределить все это?