opencv와 jni를 이용하여 안드로이드 포팅중입니다.
우선 so파일을 만드는 cpp파일은 다음과 같습니다.
#include <jni.h>
#include "FindAll.h"
JNIEXPORT void JNICALL
Java_exam_TheHiddenCatch_FindAll_matching(JNIEnv *env, jobject obj, jstring img1, jstring img2) {
double min, max;
const char *image1 = NULL; const char *image2 = NULL;
image1 = env->GetStringUTFChars(img1,NULL);
image2 = env->GetStringUTFChars(img2,NULL);
IplImage *graysrc = NULL; IplImage *resize = NULL;
IplImage *graydst = NULL; IplImage *dresize = NULL;
IplImage *cresize = NULL; IplImage *cdresize = NULL;
IplImage *colorsrc = NULL; IplImage *colordst = NULL;
IplImage *dtmp[400]; IplImage *result[400];
int flag[400]={0};
CvPoint max_loc, min_loc, curr_loc;
int i, d, x=0, y=0;
graysrc=cvLoadImage(image1,CV_LOAD_IMAGE_GRAYSCALE); // 흑백으로 load
if(graysrc!=0)
__android_log_print(ANDROID_LOG_INFO,"jni","graysrc success");
else
__android_log_print(ANDROID_LOG_INFO,"jni","graysrc failed");
(중략)
이 matching()을 java코드에서 수행시켜주면 DDMS에 다음과 같은 에러가 뜹니다...
11-22 16:47:40.632: INFO/ActivityManager(63): Displayed activity exam.TheHiddenCatch/.Matching2: 493 ms (total 493 ms)
11-22 16:47:41.902: INFO/jni(19052): graysrc failed
11-22 16:47:41.942: INFO/jni(19052): colorsrc failed
11-22 16:47:41.952: INFO/jni(19052): no1
11-22 16:47:41.972: INFO/jni(19052): /sdcard/TheHiddenCatch/D1.jpg
11-22 16:47:41.972: INFO/jni(19052): /sdcard/TheHiddenCatch/D2.jpg
11-22 16:47:42.232: INFO/DEBUG(28): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
11-22 16:47:42.232: INFO/DEBUG(28): Build fingerprint: 'generic/sdk/generic/:2.1-update1/ECLAIR/35983:eng/test-keys'
11-22 16:47:42.252: INFO/DEBUG(28): pid: 19052, tid: 19052 >>> exam.TheHiddenCatch <<<
11-22 16:47:42.252: INFO/DEBUG(28): signal 11 (SIGSEGV), fault addr 00000028
11-22 16:47:42.262: INFO/DEBUG(28): r0 00000023 r1 bebf327c r2 bebf48e0 r3 00000000
11-22 16:47:42.272: INFO/DEBUG(28): r4 80ce7b70 r5 4104ba64 r6 4104ba4c r7 00000000
11-22 16:47:42.272: INFO/DEBUG(28): r8 bebf4918 r9 4104ba64 10 00000000 fp 00000000
11-22 16:47:42.282: INFO/DEBUG(28): ip afbc30c8 sp bebf32a0 lr afbc1053 pc 80c1c432 cpsr 00000030
11-22 16:47:42.602: INFO/DEBUG(28): #00 pc 0001c432 /data/data/exam.TheHiddenCatch/lib/libFindAll.so
11-22 16:47:42.622: INFO/DEBUG(28): #01 pc 0000f1f4 /system/lib/libdvm.so
11-22 16:47:42.632: INFO/DEBUG(28): #02 pc 00038018 /system/lib/libdvm.so
11-22 16:47:42.652: INFO/DEBUG(28): #03 pc 000316a2 /system/lib/libdvm.so
11-22 16:47:42.662: INFO/DEBUG(28): #04 pc 0003d31c /system/lib/libdvm.so
11-22 16:47:42.662: INFO/DEBUG(28): #05 pc 00013f58 /system/lib/libdvm.so
11-22 16:47:42.682: INFO/DEBUG(28): #06 pc 00019888 /system/lib/libdvm.so
11-22 16:47:42.682: INFO/DEBUG(28): #07 pc 00018d5c /system/lib/libdvm.so
11-22 16:47:42.702: INFO/DEBUG(28): #08 pc 0004d3bc /system/lib/libdvm.so
11-22 16:47:42.712: INFO/DEBUG(28): #09 pc 00054e74 /system/lib/libdvm.so
11-22 16:47:42.732: INFO/DEBUG(28): #10 pc 00013f58 /system/lib/libdvm.so
11-22 16:47:42.742: INFO/DEBUG(28): #11 pc 00019888 /system/lib/libdvm.so
11-22 16:47:42.762: INFO/DEBUG(28): #12 pc 00018d5c /system/lib/libdvm.so
11-22 16:47:42.762: INFO/DEBUG(28): #13 pc 0004d6d0 /system/lib/libdvm.so
11-22 16:47:42.782: INFO/DEBUG(28): #14 pc 0003a72c /system/lib/libdvm.so
11-22 16:47:42.802: INFO/DEBUG(28): #15 pc 0002be52 /system/lib/libdvm.so
11-22 16:47:42.812: INFO/DEBUG(28): #16 pc 00026f7c /system/lib/libandroid_runtime.so
11-22 16:47:42.812: INFO/DEBUG(28): #17 pc 00027c60 /system/lib/libandroid_runtime.so
11-22 16:47:42.822: INFO/DEBUG(28): #18 pc 00008cae /system/bin/app_process
11-22 16:47:42.832: INFO/DEBUG(28): #19 pc 0000c2c6 /system/lib/libc.so
11-22 16:47:42.852: INFO/DEBUG(28): #20 pc b00018aa /system/bin/linker
11-22 16:47:42.862: INFO/DEBUG(28): code around pc:
11-22 16:47:42.862: INFO/DEBUG(28): 80c1c420 20049a23 f7ff1c21 22b2ee0e 446a0152
11-22 16:47:42.872: INFO/DEBUG(28): 80c1c430 6a9a6813 d9002af0 2304e225 9a189326
11-22 16:47:42.892: INFO/DEBUG(28): 80c1c440 9b1a991a 188924b2 01644aba 189a446c
11-22 16:47:42.892: INFO/DEBUG(28): code around lr:
11-22 16:47:42.902: INFO/DEBUG(28): afbc1040 00804a0a 58c7189b 1c311c38 f7ff1c2a
11-22 16:47:42.902: INFO/DEBUG(28): afbc1050 1c04ee7e da042800 ee90f7ff 29046801
11-22 16:47:42.912: INFO/DEBUG(28): afbc1060 1c20d0f2 46c0bdf8 0000207c 000000a8
11-22 16:47:42.912: INFO/DEBUG(28): stack:
11-22 16:47:42.922: INFO/DEBUG(28): bebf3260 000000a9
11-22 16:47:42.922: INFO/DEBUG(28): bebf3264 ad03a5b5 /system/lib/libdvm.so
11-22 16:47:42.922: INFO/DEBUG(28): bebf3268 0000aa98 [heap]
11-22 16:47:42.932: INFO/DEBUG(28): bebf326c 43ba6388 /dev/ashmem/mspace/dalvik-heap/2 (deleted)
.................
SIGSEGV가 발행하는데 이게 메모리참조에 문제가 있다는 거라는데..
어떻게 해야할까요...ㅠ