我的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:如果您认为发布代码可以提供帮助,请在评论中通知我!
答案 0 :(得分:1)
CallIntMethod
期望第一个参数是接收者(即this
)对象
如果您调用的方法是静态的,请使用CallStaticIntMethod
。