툴체인 선택
표 1. 다양한 명령 집합에 대한 APP_ABI 설정
아키텍처 | 툴체인 이름 |
---|---|
ARM 기반 | arm-linux-androideabi-<gcc-version> |
x86 기반 | x86-<gcc-version> |
MIPS 기반 | mipsel-linux-android-<gcc-version> |
ARM64 기반 | aarch64-linux-android-<gcc-version> |
X86-64 기반 | x86_64-<gcc-version> |
MIPS64 기반 | mips64el-linux-android-<gcc-version> |
Sysroot 선택
SYSROOT=$NDK/platforms/android-21/arch-arm
컴파일러 호출
간단한 호출
다음은 NDK 내에 미리 빌드 되어있는 arm-linux-androideabi-4.8
툴체인을 이용한 빌드 방법이다.
export CC="$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/ \ linux-x86/bin/arm-linux-androideabi-gcc-4.8 --sysroot=$SYSROOT" $CC -o foo.o -c foo.c
이 방법에서는 C++ STL (STLport, libc++ 또는 GNU libstdc++)을 사용할 수 없습니다. 예외나 RTTI가 지원되지도 않는다.
고급 방법
NDK는 명령줄에서 사용자 지정 툴체인 설치를 수행할 수 있는 make-standalone-toolchain.sh
셸 스크립트를 제공합니다.
$NDK/build/tools/
디렉터리에 있으며, 여기서 $NDK는 NDK의 설치 루트 디렉터리입니다.
$NDK/build/tools/make-standalone-toolchain.sh \ --arch=arm --platform=android-21 --install-dir=/tmp/my-android-toolchain
이 명령어를 실행하면 /tmp/my-android-toolchain/
이라는 이름의 디렉터리가 생성되고, 이 디렉터리에는 android-21/arch-arm
sysroot의 복사본과 32비트 ARM 아키텍처용 툴체인 바이너리의 복사본이 포함됩니다.
표 3. --arch
를 사용하는 툴체인과 해당 값
툴체인 | 값 |
---|---|
mips64 컴파일러 | --arch=mips64 |
mips GCC 4.8 컴파일러 | --arch=mips |
x86 GCC 4.8 컴파일러 | --arch=x86 |
x86_64 GCC 4.8 컴파일러 | --arch=x86_64 |
mips GCC 4.8 컴파일러 | --arch=mips |
표 4. --toolchain
을 사용하는 툴체인과 해당 값
툴체인 | 값 |
---|---|
arm | --toolchain=arm-linux-androideabi-4.8 --toolchain=arm-linux-androideabi-4.9 --toolchain=arm-linux-android-clang3.5 --toolchain=arm-linux-android-clang3.6 |
x86 | --toolchain=x86-linux-android-4.8 --toolchain=x86-linux-android-4.9 --toolchain=x86-linux-android-clang3.5 --toolchain=x86-linux-android-clang3.6 |
mips | --toolchain=mips-linux-android-4.8 --toolchain=mips-linux-android-4.9 --toolchain=mips-linux-android-clang3.5 --toolchain=mips-linux-android-clang3.6 |
arm64 | --toolchain=aarch64-linux-android-4.9 --toolchain=aarch64-linux-android-clang3.5 --toolchain=aarch64-linux-android-clang3.6 |
x86_64 | --toolchain=x86_64-linux-android-4.9 --toolchain=x86_64-linux-android-clang3.5 --toolchain=x86_64-linux-android-clang3.6 |
mips64 | --toolchain=mips64el-linux-android-4.9 --toolchain=mips64el-linux-android-clang3.5 --toolchain=mips64el-linux-android-clang3.6 |
CMakeList.txt
# For more information about using CMake with Android Studio, read the # documentation: https://d.android.com/studio/projects/add-native-code.html # Sets the minimum version of CMake required to build the native library. cmake_minimum_required(VERSION 3.4.1) # Creates and names a library, sets it as either STATIC # or SHARED, and provides the relative paths to its source code. # You can define multiple libraries, and CMake builds them for you. # Gradle automatically packages shared libraries with your APK.
다음은 .cpp 라이브러리 추가하는 방법이다.
add_library( # Sets the name of the library. native-lib # Sets the library as a shared library. SHARED # Provides a relative path to your source file(s). src/main/cpp/native-lib.cpp )
add_library( # Sets the name of the library. blerp # Sets the library as a shared library. SHARED # Provides a relative path to your source file(s). src/main/cpp/detection/blerp.cpp ) add_library( # Sets the name of the library. util # Sets the library as a shared library. SHARED # Provides a relative path to your source file(s). src/main/cpp/detection/util.cpp ) add_library( # Sets the name of the library. input-processing # Sets the library as a shared library. SHARED # Provides a relative path to your source file(s). src/main/cpp/detection/input_processing.cpp )
필요한 경우에는 add_library 의 세번째 파라미터에 여러 cpp 파일을 묶어 하나의 라이브러리로 등록할 수 있다. (좋은 의견을 주신 코드몬님 감사드립니다. )