출처 : http://mobilism.tistory.com/57
프로젝트를 진행하다보면 여러 폴더에 나뉘어 있는 라이브러리를 링크해야 할 일이 생기는데,
NDK 샘플이나 여타의 코드를 보면 전부 한 폴더에 있는 라이브러리만 링크하고 있더군요.
저나 제 주변에 NDK나 리눅스 프로그래밍에 대해서 아는 사람이 없었기 때문에 한참을 헤매고 나서야 방법을 알게 되었습니다.
엄청나게 간단한데 구글링으로도 도저히 찾을수가 없더라구요 ㅠ_ㅠ
방법은 아래처럼 LOCAL_LDLIBS 에 원하는 폴더를 모두 적어주면 됩니다.
# libsubtract.so 는 LibTest2/libs/armeabi 에 있다고 가정합니다.
LOCAL_LDLIBS := -L$(call host-path, $(LOCAL_PATH)/../../LibTest1/libs/armeabi) \
-L$(call host-path, $(LOCAL_PATH)/../../LibTest2/libs/armeabi) \
-ladd -lsubtract
위와 같이할 경우 한 가지 주의점은 static library 링크는 문제가 없는데 dynamic library 링크는 런타임시에 링크 에러가 발생한다는 것 입니다.
dynamic library 링크는 빌드시에 단순한 정보들만을 확인하므로 실제 모듈은 별도로 로딩을 해 주어야 하기 때문이죠.
( System.loadLibrary() 메서드를 사용해서 )
실제로 라이브러리를 사용하는 프로젝트의 $(ProjectDir)/libs/armeabi 폴더는 ndk-build 를 실행하면 모두 삭제되므로, 빌드가 끝난 후
모든 dynamic library 를 $(ProjectDir)/libs/armeabi 폴더로 복사시켜 주면 됩니다. 쉘 스크립트로 자동으로 복사되게끔 하면 편리하겠죠.
(제가 NDK 사용법이나 리눅스 프로그래밍에 대해서 잘 모르기 때문에 이 방법밖에 못 알아냈는데, 혹시 더 좋은 방법 아시는 분은 댓글 부탁드립니다... ^^;;)
아~ 주의할 점이 한 가지 더 있는데, cygwin 콘솔창에서 ndk-build 를 실행하셨다면 이클립스에서 애플리케이션을 실행시키기 전에 반드시 F5 키를 눌러서
프로젝트를 refresh 시켜 주셔야 합니다. refresh 를 시켜주지 않으면 라이브러리가 변경된 것을 인식하지 못 하더군요.
'IT_Programming > Android_NDK' 카테고리의 다른 글
NDK 라이브러리 배포 시 java.lang.UnsatisfiedLinkError 에 대해서... (0) | 2016.05.10 |
---|---|
[펌] 안드로이드의 ABI 관리 (0) | 2016.03.16 |
[Android Studio] Android Studio Project에 NDK 적용하기 (0) | 2015.05.19 |
[펌][디버깅] 안드로이드 NDK에서 Log 찍기 (0) | 2015.01.27 |
[NDK] Android.mk 분석 (0) | 2014.03.07 |