Windows中的JNI_CreateJavaVM崩溃时没有错误,但可在MacO上使用

时间:2019-04-27 12:23:09

标签: java c++

尝试从C ++创建JVM在C ++代码中运行Java代码时遇到问题。

我在macOs中做了一些测试,并且运行良好,但是在Windows中它可以编译,但是当我运行代码时,它会退出而没有任何输出。

下面有一段有关创建JVM的代码。

   JavaVMOption jvmopt[1];
   jvmopt[0].optionString = (char *)"-Djava.class.path=.";

   JavaVMInitArgs vmArgs;
   vmArgs.version = JNI_VERSION_1_2;
   vmArgs.nOptions = 3;
   vmArgs.options = jvmopt;
   vmArgs.ignoreUnrecognized = JNI_TRUE;

   cout << "START JVM \n";
   JavaVM *javaVM;
   JNIEnv *jniEnv;
   long flag = JNI_CreateJavaVM(&javaVM, (void **)&jniEnv, &vmArgs);
   cout << flag << "\n";

   if (flag == JNI_ERR)
   {
      cout << "Error creating VM. Exiting...\n";
      return 1;
   }
   cout << "\nJVM CREATED";

   (...)

   javaVM->DestroyJavaVM();```

我使用此.bat来编译和执行代码。

Windows

@ECHO OFF
ECHO BUILDING 1/1

g++ ^
    -I"C:\Program Files (x86)\Java\jdk1.8.0_202\include" ^
    -I"C:\Program Files (x86)\Java\jdk1.8.0_202\include\win32" ^
    -L"C:\Program Files (x86)\Java\jdk1.8.0_202\lib"^
    -o jvmdemo.exe jvmdemo.cpp -ljvm


ECHO BUILDING [OK]

jvmdemo.exe

我使用此bash在macOs中编译和执行代码,并且工作正常,它提供了所有输出并创建了JVM。

MacOS

#!/bin/bash
echo "BUILDING 1/1"

g++  \
    -I/usr/include \
    -I$JAVA_HOME/include \
    -I$JAVA_HOME/include/darwin \
    -I$JAVA_HOME/jre/lib/server/ \
    -rpath $JAVA_HOME/jre/lib/server/ \
-o jvmdemo jvmdemo.cpp $JAVA_HOME/jre/lib/server/libjvm.dylib 

echo "BUILDING [OK]"

./jvmdemo

正如我说的那样,它在macO上运行完美,但是在Windows中以某种方式可以编译,但是在我运行它时却没有输出,如果我从g ++中删除了-ljvm,它会给出错误undefined reference to `_imp__JNI_CreateJavaVM@12',奇怪,因为它甚至不显示简单的cout,但如果我注释创建JVM的行,它将给出所有输出。

有什么建议或帮助吗?

0 个答案:

没有答案