调用" CallIntMethod(jclass,jmethodId,...)时JNI代码中的分段错误

时间:2014-07-22 13:26:59

标签: jvm java-native-interface segmentation-fault

我的JNI代码包括从C ++ main调用一些java函数(.jar文件)。

代码编译得很好,但在执行期间我得到:

分段错误(核心转储)

我运行GNU gdb进行调试,我在调用此方法时发现了以下内容:

if(mid != 0) {
doub = env->CallIntMethod(cls,mid,10);

编程接收信号SIGSEGV,分段故障。      0x00000000678856ed in jvm!JNI_GetCreatedJavaVMs()     来自/ cygdrive / c / Program Files / Java / jdk1.8.0_05 / jre / bin / server / jvm.dll

我还检查了是否找到了类(JNI FindClass函数),并且是否通过返回值创建了JVM(JNI_CreateJavaVM函数),并且一切似乎都很好。

在调试结束时,线程退出代码为35584:

[主题4632.0x1304退出代码35584]

我没有找到关于这个值的任何信息,除了它暗示了可执行文件所需内容的路径问题......有关于此的任何想法? 我为.jar文件指定了如下路径:

char op[] = "-Djava.class.path=D:\\path\\tojar/MyJar.jar;D:\\path\\toclass";
options[0].optionString = op;

谢谢StackOverflowers:)

ps:如果您认为发布代码可以提供帮助,请在评论中通知我!

1 个答案:

答案 0 :(得分:1)

CallIntMethod期望第一个参数是接收者(即this)对象 如果您调用的方法是静态的,请使用CallStaticIntMethod