【问题标题】:JNI_CreateJavaVM fails with Adopt OpenJDK 11.0.8JNI_CreateJavaVM 因采用 OpenJDK 11.0.8 而失败
【发布时间】:2020-07-21 10:00:06
【问题描述】:

我们的 64 位 C 程序使用 JNI 实例化 JVM。目前我们正在使用 Adopt Open JDK 8.0.1920.12,一切正常。现在我们正在尝试迁移到 Adopt Open JDK 11.0.8.0。使用那个时,JNI_CreateJavaVM 总是返回 -1。

我所做的基本上是 a) 下载 JDK(文件 OpenJDK11U-jre_x64_windows_hotspot_11.0.8_10.zip) b) 将其内容放入之前包含 Java 8 JDK 的文件夹中。这个文件夹可以在PATH环境变量中找到

我们的代码是:

char* ipV4 = "-Djava.net.preferIPv4Stack=true";
opts[numopts++].optionString = ipV4;

// get path pointing to our Java classes
classpath = WfBuildJVMClasspathStr();
opts[numopts++].optionString = classpath;

//make sure we notify the JVM we are a service
sprintf(servicearg, "-Xrs");
opts[numopts++].optionString = servicearg;

vm_args.version = JNI_VERSION_1_2;
vm_args.options = opts;
vm_args.nOptions = numopts;
vm_args.ignoreUnrecognized = true;

status = JNI_CreateJavaVM(&jvm, (void **)&envP, &vm_args);

另外,我也尝试用以下代码替换最后一行:

char JVMExe[STRPATH + 1];
// make up path to the <JDK install>\bin\server\jvm.dll
sprintf(JVMExe, "%s\\jvm.dll", WF.JVMDir);
HINSTANCE hinstLib = LoadLibrary(TEXT(JVMExe));
typedef jint(JNICALL *PtrCreateJavaVM)(JavaVM **, void **, void *);
PtrCreateJavaVM ptrCreateJavaVM = (PtrCreateJavaVM)GetProcAddress(hinstLib, "JNI_CreateJavaVM");
status = ptrCreateJavaVM(&jvm, (void**)&envP, &vm_args);

不幸的是,结果相同(阴性)。

知道我做错了什么吗?

【问题讨论】:

  • 你能扩展你的例子吗? optsserviceargs 是如何声明/定义的?你如何编译和链接你的程序?
  • 我已经删除了我的答案,因为它似乎没有解决问题。几个澄清问题:你能告诉我们WfBuildJVMClasspathStr的输出吗?您能否确认您可以在同一安装中使用java -cp ... 运行有问题的jvm?几乎可以肯定没关系,但你能把true 改成JNI_TRUE 吗?你能提供一个最小的可重现的例子吗?你能描述一下你的类路径上的内容吗,也就是一个带有清单的 jar 或类?这也是一个长镜头,但您可能需要 rt.jar 在类路径上。

标签: java jvm java-native-interface adoptopenjdk


【解决方案1】:

我找到了问题的原因。我创建了一个最小的命令行 exe 并让它写入控制台。我收到此错误消息: /lib/ext 存在,不再支持扩展机制;请改用 -classpath。

在查找时,我发现了这样的文章: https://docs.oracle.com/javase/9/migrate/toc.htm#JSMIG-GUID-2C896CA8-927C-4381-A737-B1D81D964B7B

将我的 JRE 的“lib”目录中的“ext”文件夹重命名为例如"ext_go_away" JNI_CreateJavaVM 成功。

【讨论】:

    猜你喜欢
    • 2010-10-20
    • 2019-10-10
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 2018-02-16
    • 2012-10-03
    • 2014-07-16
    • 2021-11-23
    相关资源
    最近更新 更多