글
젤리빈 소스를 통채로 가져와서 기본 디바이스를 한번 빌드하고, 이 상태에서 앱을 개발하면 편리한 잇점이 있다.
그런데 이 환경에서 native 라이브러리를 컴파일 해서 ICS가 올라간 폰에 앱을 올렸더니 reloc_library 오류가 나면서 __open_2 라는 심볼을 못찾아 오류를 내고 있었다.
arm-eabi-objdump -R libfoobar.so 명령으로 foobar 라이브러리에 __open_2 심볼을 찾아보니 있었고, 예전에 ICS 소스트리에서 컴파일했던 잘 돌아가던 구버전의 라이브러리는 __open_2 심볼을 찾아볼 수가 없었다.
__open_2라는 심볼이 무엇인가 구글로 검색해서 살펴보니 2012년에 bionic/libc 소스에 추가된 부분이었다.
이와 관련된 Android.mk파일을 찾아서 FORTIFY_SOURCE를 어떻게 정의하고 있나 살펴봤더니, 아니나다를까 일부 native 라이브러리는 FORTIFY_SOURCE 정의를 끄고 컴파일하고 있었다.
그래서 LOCAL_CFLAGS := -U_FORTIFY_SOURCE 라인을 Android.mk에 추가한 후에 라이브러리를 젤리빈 소스트리에서 다시 컴파일하고 심볼을 objdump -R 명령으로 다시 살펴보니 __open_2 심볼이 사라졌다. 빙고~!
그리고 당연히도 reloc_library 오류가 나지 않고 아무런 문제 없이 앱이 실행된다~
'안드로이드' 카테고리의 다른 글
ringdroid에 JLayer MP3 디코더 적용하기 (0) | 2014.09.12 |
---|---|
ringdroid에서 mp3 waveform이 잘못 나오는 문제 수정 (0) | 2014.09.09 |
apk를 unzip으로 풀어서 다시 압축하는 경우 (0) | 2014.09.05 |
안드로이드 내장 음성 인식엔진 Nuance SREC (27) | 2013.03.16 |
저작권 문제없는 단어장 (1) | 2013.03.02 |
RECENT COMMENT