안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요.
ndk 로 프로젝트를 진해하고 있습니다.
개발환경은 윈도우7 + 이클립스 + cygwin 입니다.
질문 :
타사에서 제공해주는 라이브러리를 사용하고 있습니다. (.a 파일)
이 파일을 로드 해서 사용해야 하는데,
java <-> (제가 만든) jni 는 호출이 잘 됩니다.
그런데, jni 에서 .a 에 있는 아무 함수나 호출하면 아무 메시지 없이 어플리케이션이
종료되버리네요.
몇가지 현상을 적어봅니다.
1. 함수명이나 인자가 틀린거면 .so 컴파일 할때 오류가 났을것이다. (오류 안남)
2. jni 디버그 찾다가 안드로이드 로그캣 사용하는 방법이 있어서 log를 찍어봤는데 로그는 잘 찍힙니다.
.a 에 있는 함수만 호출되면 프로그램 사망.
3. 원래 .a 내부에서 정상적으로 함수가 호출이 되면 로그(파일로그)를 찍어야 하는데 로그가 남지 않는거 보면 첨부터 함수가 호출이
되지 않는 모양입니다.
4. 처음에 제공해준 옵션으로 컴파일이 되지 않아 mk 파일 수정했습니다.
LOCAL_LDLIBS := -ldl -L./obj/local/armeabi -l*** -l***** -l**** -llog (*** = 라이브러리명)
몇일째 봐도 풀리지가 않습니다.ㅠ
도와주세요.




정상적으로 컴파일 되고 .. 링커가 제대로 돌아가서 obj를 만들면 일단 문법적으로
문제가 없는것입니다.
하지만 문법적으로 문제가 없다고 해서 모든게 제대로 링킹된건 확신할 수 없습니다.
따라서 LOGI 와 같이 로그메세지를 출력해서 .a의 함수를 호출할때 문제가 없는지
확실히 캐치 하는게 좋습니다.
그리고 so 호출상황에서 문제가 된다면 ndk-stack에서 검출이 될 수 있고 검출이
된다면 함수를 찾을 수 있을겁니다.
만약 검출이 안된다면 포인터 문제가 있을 가능성이 제일 높습니다.
포인터 문제는 대부분 포인터 연산에서 잘못될 경우입니다.