리눅스 & 안드로이드2014. 5. 12. 16:27

Open Source library를 android에서 사용하기 위해 NDK로 빌드를 해야 할 필요가 생겼다.

그 옛날(?) Gingerbread 일 때는, NDK에서 STL을 지원하지 않아서 stlport를 직접 빌드해서 넣거나, NDK에 stlport를 추가 해 놓은 NDK 버전을 사용해야 했었는데, 지금은 정말 편 해 졌더라.

MS Windows + NDK 환경에서 STL을 이용하고하 할 경우 아래와 같이 하면 간단히 해결된다. (정말 초 간단 함-0-)

 

  1. 우선 NDK를 다운로드 받아서 적당한 위치에 압축을 풀어준다.
    설치과정은 필요 없으며, 현재 최신 버전은 Android NDK, Revision 10e (May 2015) 이다.

  2. 소스 디렉토리를 구성한다.
    빌드 하고자 하는 소스는 jni 디렉토리 아래에 위치 해야 하며, 해당 디렉토리에 Android.mk / Application.mk 파일도 위치 해 있어야 한다. (ex. prj_root/jni/Android.mk, prj_root/jni/Application.mk 등)

  3. Android.mk 파일은 다른 Android.mk 파일을 참고하되, stl을 사용하기 위해서 추가해야 하는 내용은 없다.

  4. (여기가 중요!) Application.mk 파일이 중요한데, 여기에 다음과 같은 한 줄을 추가하면 C++11 STL이 shared library로 포함된다.
    APP_STL := stlport_static
    APP_STL := gnustl_shared
    APP_CPPFLAGS += -std=c++11

  5. 위 한 줄이면, include나 link path를 추가할 필요가 없다!!!
    단, 본인의 모듈에만 적용하고 싶다면, Android.mk 파일에
    LOCAL_CPPFLAGS += -std=c++11

  6. 여기에 추가로, tool chain을 선택할 수 있다. (gcc / clang)
    Application.mk 파일에 아래와 같이 추가해 주면 된다.
    NDK_TOOLCHAIN_VERSION := 4.8
    또는
    NDK_TOOLCHAIN_VERSION := clang

  7. 빌드는 (위의 예에서) prj_root 디렉토리에서, (NDK PATH)\ndk-build.cmd 를 실행하면 된다.

 

NDK_TOOLCHAIN_VERSION := clang

APP_STL := gnustl_shared

APP_CPPFLAGS += -std=c++11


이렇게 하면, 간단히 STL을 이용할 수 있다.

GB 시절(?)에 stl 사용하려고 삽질 했던걸 생각하면, 정말 껌이 되었구나!!! (__)

 

Posted by 세월의돌