我在 JNI 中使用 C++ 作为我的本机。我能够创建 (c++) 共享库,并且我能够在共享库的帮助下调用 java 函数。
我的过程中涉及的步骤:
1) 使用 JNI_CreateJavaVm 创建 VM。[IN C++]
2) 使用创建的虚拟机进行处理。
3) 退出线程
如果我将再次执行相同的过程,则 JNI_CreateJavaVm 没有创建任何 VM,并且它返回 JNI 错误代码为 -1(未知错误)。然后我检查返回 0 的 getCreatedJavaVMs 返回,同时我尝试使用GetEnv 它崩溃了。
我也尝试了 GetJavaVM 函数,但它因错误消息而崩溃,
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00c1b3ed, pid=8645, tid=2961177456
#
# JRE version: 7.0_25-b15
# Java VM: Java HotSpot(TM) Server VM (23.25-b01 mixed mode linux-x86 )
# Problematic frame:
# C [libVsphere.so+0x6a3ed] _Jv_JNIEnv::GetJavaVM(_Jv_JavaVM**)+0xb
为什么会发生以及如何解决这个问题?
如何在多线程环境中使用 JNI_CreateJavaVm、JNI_GetCreatedVMs 和 GetJavaVM。