将-XX选项传递给JNI_CreateJavaVM

时间:2017-08-31 15:17:38

标签: java jvm java-native-interface

我尝试使用以下代码将选项传递给JNI_CreateJavaVM():

auto options = std::string{"-XX:+UseMembar -Djava.class.path="} + clspath;
jvm_options.optionString = const_cast<char *>(options.c_str());
args.options = &jvm_options;
args.ignoreUnrecognized = 0;
int rv;
rv = JNI_CreateJavaVM(jvm, reinterpret_cast<void **>(&env_), &args);
电话结束后,rv为-6。

我应该如何通过该选项?

由于

2 个答案:

答案 0 :(得分:0)

结果可以通过环境变量JAVA_TOOL_OPTIONS

传递选项

答案 1 :(得分:0)

我看到您以不同的方式解决了您的问题,但这就是您的代码无法正常工作的原因。您在一个选项参数中传递了两个选项。正如https://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/invocation.html#JNI_CreateJavaVM上的文档所述

  

选项字段是以下类型的数组:

typedef struct JavaVMOption {
    char *optionString;  /* the option as a string in the default platform encoding */
    void *extraInfo;
} JavaVMOption;

注意&#34;数组&#34;部分。将-XX:+UseMembar-Djava.class.path=...放在jvm_options[0]jvm_options[1]的单独字符串中,然后设置args.nOptions = 2