Я пытаюсь создать виртуальную машину Java (JVM) из программы на C ++. После исследования я обнаружил, что для этого мне нужно вызвать метод JNI_CreateJavaVM. Просто чтобы попытаться, я получил фрагмент кода Майкла Брукмайера, размещенный в этом вопросе Это не создаст Java VM (JNI) , изменяющего очень мало вещей, чтобы избежать предупреждений.
#include <jni.h>
#include <iostream>
int main(int argc, char *argv[])
{
char optionStr[] = "-Djava.class.path=./build/java"; //Path to the java source code
JavaVM *jvm;
JNIEnv *env;
JavaVMInitArgs vm_args;
JavaVMOption options[1];
options[0].optionString = optionStr;
vm_args.version = JNI_VERSION_1_2;
vm_args.nOptions = 1;
vm_args.options = options;
vm_args.ignoreUnrecognized = 0;
jint ret = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
std::cout << "JNI_CreateJavaVM returned " << ret << std::endl;
return 0;
}
Я компилирую предыдущую программу в gcc внутри cygwin, но получаю некоторые ошибки ссылки:
$ gcc main.cpp /cygdrive/c/Progra~1/Java/jdk1.6.0_24/lib/jvm.lib -lstdc++ -o main
/tmp/ccKyd2Xk.o:main.cpp:(.text+0xfa): undefined reference to `_JNI_CreateJavaVM'
collect2: ld returned 1 exit status
Чтобы проверить символ в jvm.lib, я использовал команду nm и получил очень большой список этих сообщений:
BFD: /cygdrive/c/Progra~1/Java/jdk1.6.0_24/lib/jvm.lib(jvm.dll): Recognised but
unhandled machine type (0x8664) in Import Library Format archive
nm: jvm.dll: File format not recognized
Я могу предположить, что проблема в том, что Java Development Kit (JVM) является 64-битным. Моя ОС - 64-битная Windows 7, а gcc генерирует 32-битное приложение. Итак, я думаю, что есть несовместимость. Я также попытался сгенерировать приложение в 64-битном режиме (хотя я бы предпочел иметь 32-битное), и вот результат:
$ gcc -m64 main.cpp /cygdrive/c/Progra~1/Java/jdk1.6.0_24/lib/jvm.lib -lstdc++ -o main
main.cpp:1: sorry, unimplemented: 64-bit mode not compiled in
Может кто-нибудь предложить способ достижения JVM в C ++ с использованием этой среды? Или, если я ошибаюсь (это может быть так же), может кто-нибудь сказать мне, почему я получаю эти ошибки?
Заранее спасибо!