2013-01-22 107 views
0

我编译了一个用于jni的测试dll。它实际上完全是空的,除了#include < jni.h>。它编译好。我评论了其他一切,试图让它工作。我使用了gcc cygwin版本和-shared和eclipse。加载jni时jre崩溃

这是类加载库:

static 
{ 
    final File f= new File(new File("res"), "mandc.dll"); 
    System.out.println(f.exists()); 
    System.load(f.getAbsolutePath()); 
    System.out.println("Loaded!"); 
} 

// public static native long mand(final double cx, final double cy, 
//   final double jx, final double jy, long iter); 

public static native void mand(); 

真的是版画,证明该错误是真实加载的最后一件事! 如果我在eclipse中运行,会打印两条错误消息,但互联网并不知道它们是什么。

消息:

2 [main] javaw <random number here> exception::handle: Exception: STATUS_STACK_OVERFLOW 
667 [main] javaw <random number here> open_stackdumpfile: Dumping stack trace to javaw.exe.stackdump 

堆栈转储是无信息。

Exception: STATUS_STACK_OVERFLOW at eip=61157C62 
eax=0001C038 ebx=49E0834C ecx=49DE2ABC edx=49E27DB4 esi=49E07B2C edi=49E27B34 
ebp=49E07ACC esp=49E07AB4 program=C:\Program Files\Java\jre7\bin\javaw.exe, pid 2688, thread main 
cs=001B ds=0023 es=0023 fs=003B gs=0000 ss=0023 
Stack trace: 
Frame  Function Args 
49E07ACC 61157C62 (49E2D000, 49E27B3A, 49E27DB4, 00000008) 
49E07AFC 6106C0B5 (49E27B3A, 49E27D78, 00000008, 49E27B2C) 
49E27B4C 6106C6D1 (49E27B70, 00000C90, 00000000, 49E27DB4) 
49E27DEC 6100584E (49E27EBC, 611FBAF0, 611FBAEC, 49E27E2C) 
49E27E3C 61005D28 (49E27FC3, 611FBAF0, 611FBAEC, 00000001) 
49E2801C 61006F07 (00000000, 49E28058, 61006990, 49E2B268) 
End of stack trace 

当我从维基百科页面运行示例时,实验也失败。它以同样的方式失败。

回答

0

问题修复。我将工具链从cygwin gcc切换到了mingw gcc。为了支持这个,我必须从cygwin安装程序安装额外的mingw软件包。

我想cygwin与java不兼容。更好的错误信息将不胜感激。