안녕하십니까? 안드로이드쪽 관련해서 기존 모듈을 안드로이드쪽에 맞게끔 만들어주고 있습니다.

java에서 jni를 통해 .c로 된 .so파일을 콜하고 해당 .so에서 실제 모듈(.so)로 콜하게 되는데요.

java => jni => A.so <=> B.so(모듈)

A.so는 jni에 맞게끔 jstirng처리된 .c파일입니다. (java와 실제 모듈 B.so를 연결만 시켜주는 역활이죠.)

일단은 리눅스쪽에서 .c 파일을 하나 만들어서(exe) 에서 B.so를 콜해서 정상적으로 되는것까지는 확인했는데요.

jni의 A.so에서 B.so를 콜하려니 도통 안되는군요.

dlopen으로 해서 B.so를 콜했는데요.

아래의 내용은 A.so의 B.so(libsample.so)를 dlopen으로 로딩해오는 부분입니다.

 handle = dlopen("/data/data/com.sample.samplejni/lib/libsample.so", RTLD_NOW);

    if (!handle)
    {
  LOGD("open error\n");
  LOGD("dlopen error => %s%s\n", dlerror(), stderr);
        exit(1);
    }

에서 에러가 나네요.

04-28 06:32:16.775: DEBUG/sample-jni_log(1974): dlopen error => Cannot load library: get_lib_extents[706]:    30 - /data/data/com.sample.samplejni/lib/libsample.so is not a valid ELF object

위의 에러가 나네요. /system/lib쪽으로는 들어가질않구요. 파일사이즈가 100kb정도가 돼나서요. read file만되는걸 권한바꾸고
해도 영역이 작아서 들어가질 않아서 /data/data/프로젝트/lib쪽에 넣어주고 그걸

dlopen으로 가져오겠금 하는데 안되네요.

libsample.so 의 선언 sample.h의 선언은..

int test_func(char *input, char *output, char *flag1, char *flag2);

입니다. .c쪽에도 위와 같이 선언되어있구요.

혹 제가 뭘 잘못하는게 있을까요.. 여러분들의 조언 좀 부탁드리겠습니다.