Вопрос по eclipse, g++, java, c++, java-native-interface – Использование JNI для выполнения java jar из программы на C ++ с использованием g ++ или eclipse

3

я пытаюсь позвонить /выполнять явабаночка изC ++ программа.

Вот варианты, которые янашел так далеко: я

Use JNI
Use Jace
Use JunC++ion
Use execl("java", "java", "-jar", "myprog.jar", NULL);
Use execlp("java", "java", "-jar", "myprog.jar", (char *)0);
Use system("java filename.jar");
Use popen("java -jar test.jar text1 text2", "r");
Use CreateProcess(...);
Use JNA

Я хотел бы использовать JNI, однако яЯ сталкиваюсь с проблемами.

========================

hello.cpp

У меня есть простой класс Hello.cpp:

#include 
#include 

using namespace std;

int main() {
      cout < "Hello World" < endl; // prints Hello World

      JavaVM *jvm;       /* denotes a Java VM */
      JNIEnv *env;       /* pointer to native method interface */
      JDK1_1InitArgs vm_args; /* JDK 1.1 VM initialization arguments */
      vm_args.version = 0x00010001; /* New in 1.1.2: VM version */
      /* Get the default initialization arguments and set the class
       * path */
      JNI_GetDefaultJavaVMInitArgs(&vm_args);
      vm_args.classpath = "/home/FinishedJars/HelloWorld/hello2.jar";
      /* load and initialize a Java VM, return a JNI interface
       * pointer in env */
      JNI_CreateJavaVM(&jvm, &env, &vm_args);
      /* invoke the Main.test method using the JNI */
      jclass cls = env->FindClass("Main");
      jmethodID mid = env->GetStaticMethodID(cls, "test", "(I)V");
      env->CallStaticVoidMethod(cls, mid, 100);
      /* We could have created an Object and called methods on it instead */
      /* We are done. */
      jvm->DestroyJavaVM();

    return 0;
}

Ваш Ответ

1   ответ
5

как в Linux:

g++ -I /usr/lib/jvm/jdk1.6.0_34-x86/include/ -I /usr/lib/jvm/jdk1.6.0_34-x86/include/linux Hello.cpp

потому что несколько макросов (какJNICALL) установлены там. Надеюсь, чтоЯ исправлю каскад ошибок jni.h.

РЕДАКТИРОВАТЬ: Все еще застряли? Пытаться:

JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);

Это'по крайней мере, справимся с проблемой компиляции. Я нене знаю, если этоЛ.Л.Работа, так как я'мы не пробовали это раньше.

Большой! Позвольте мне попробовать ... Katie
Вот Это Да! Это значительно помогло! Я'Теперь я получаю только 4 ошибки вместо 1000+. Спасибо! Теперь мне просто нужно выяснить остальное Katie
Добавлена подсказка, чтобы обойти ошибку. ldav1s
Спасибо! Я'попробую Katie

Похожие вопросы