본문 바로가기

Android

Android dynamic link

반응형
현재 안드로이드에서 제공되는 JNI를 이용할 경우

생성된 .so 파일이 다른 so를 참조하고 있으면 문제가 된다.

간단하게 말하면 못 찾는다.

별의 별 test를 다 해 본 결과...

안된다는게 결론...

data/data/<pakcage Name>/lib 에 들어있는 .so는 system/lib에 있는 .so를 1개만 로딩 할 수 있다. 

Why ?

이유는 linker 문제인 것으로 판단된다.

어떤 똑똑한 사람이 이걸 정리해 놨길래 나도 해봤다.

하지만 실패하였다.

내 PC 의 사용자 이름이 한글로 되어있어서...

google에서 배포한 sdk에 셋팅된 emulator는 ....................... 문제 없는데

내가 ubuntu에서 직접 생성한 img는 문제가 되는 구나

어쨌거나.. 영문으로 사용자 등록된 pc를 이용하여 test 하였더니 

2개의 .so를 연속적으로 loading하였다.

수정한 코드는 다음과 같다.


mydroid/bionic/linker/linker.c

soinfo *find_library(const char* name)
{
soinfo *si;
char buf[512];
const char **path;

if(name[0] == '\/'){
for(path = sopaths; *path; path++){
snprintf(buf, sizeof(buf),"%s/%s", *path, name);

for(si = solist; si!=0; si= si->next){
if(!strcmp(buf, si->name)){
if(si->flags &FLAG_ERROR) return 0;
if(si->flags &FLAG_LINKED) return si;
ERROR("OOPS:%5d recursive link to '%s'\n:, pid, si-name);
return 0;
}
}
}
}

이하 생략

그런데 사용하던 image에 linker만 갈아끼는건 어떡해 하는걸까?

...