尝试运行本机库时发生java异常\u访问\u冲突?
所以我把这个native library here编译成了一个。因此,使用MinGW(64位版本,Eclipse对我大喊要运行32位版本)进行归档
我能够成功地加载它并从中调用函数,但一旦调用函数,就会出现以下错误:
A fatal error has been detected by the Java Runtime Environment:
EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00000000672434fd, pid=6932, tid=5628
JRE version: Java(TM) SE Runtime Environment (7.0_67-b01) (build 1.7.0_67-b01)
Java VM: Java HotSpot(TM) 64-Bit Server VM (24.65-b04 mixed mode windows-amd64 compressed oops)
Problematic frame: C [gifflen.so+0x34fd]
所以我不确定该怎么做。我假设是32位,64位的问题?很可能不是,但那只是我的猜测
日志文件很大,所以我不确定什么是相关的。这里有一个部分:
Stack: [0x000000000e720000,0x000000000e820000], sp=0x000000000e81efc0, free space=1019k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C [gifflen6.so+0x34fd]
C [gifflen6.so+0x2400]
Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j org.jiggawatt.giffle.Giffle.AddFrame([I)I+0
j org.jiggawatt.giffle.Giffle.addFrame([I)V+2
... (etc) ...
j com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop()V+684
j com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run()V+27
v ~StubRoutines::call_stub
崩溃似乎发生在本机的AddFrame()函数中?如果是这样的话,这不是第一个被调用的函数,Init()之前被调用,显然不会导致崩溃
编辑,崩溃源?:
所以我得到了printf()的工作,可以看到事件的进展
本机的Init()函数运行,没有问题
本机函数AddFrame()也会运行一段时间,直到达到以下要求:
// ...
printf("gifflen: checkpoint\n");
i = 0;
while (i < samplepixels) {
printf("\ngifflen: in loop at %o (1)\n", i);
/*b = p[0] << netbiasshift;
g = p[1] << netbiasshift;
r = p[2] << netbiasshift;*/
b = (((*p)) & 0xff) << netbiasshift;
g = (((*p) >> 8) & 0xff) << netbiasshift;
r = (((*p) >> 16) & 0xff) << netbiasshift;
j = contest(b,g,r);
printf("gifflen: still in loop (2)\n");
altersingle(alpha,j,b,g,r);
if (rad) alterneigh(rad,j,b,g,r); /* alter neighbours */
printf("gifflen: still in loop (3)\n");
p += step;
if (p >= (unsigned int *)lim) p -= lengthcount;
printf("gifflen: still in loop (4)\n");
i++;
if (i%delta == 0) {
alpha -= alpha / alphadec;
radius -= radius / radiusdec;
rad = radius >> radiusbiasshift;
if (rad <= 1) rad = 0;
for (j=0; j<rad; j++)
radpower[j] = alpha*(((rad*rad - j*j)*radbias)/(rad*rad));
}
printf("gifflen: still in loop (5)\n");
}
// ...
日志如下所示:
gifflen: checkpoint
gifflen: in loop at 0 (1)
gifflen: still in loop (2)
gifflen: still in loop (3)
gifflen: still in loop (4)
gifflen: still in loop (5)
// ...
gifflen: in loop at 714 (1)
gifflen: still in loop (2)
gifflen: still in loop (3)
gifflen: still in loop (4)
gifflen: still in loop (5)
gifflen: in loop at 715 (1)
gifflen: still in loop (2)
gifflen: still in loop (3)
gifflen: still in loop (4)
gifflen: still in loop (5)
gifflen: in loop at 716 (1)
*crash*
当samplepixels为230400(640 x 360 gif大小=230400像素)时,迭代在716处崩溃
不确定这是否意味着什么,但在Eclipse控制台中,“致命错误”崩溃打印首先出现,然后是我上面发布的所有日志。(它不在前面,这会更有意义。)
不明白为什么在716次迭代之后,事情会停止工作
共 (0) 个答案