Android NDK

Introduction

Android NDK 裡面會附上 Cross Compile 用的程式, 例如 toolchains/ 資料夾裡面就包含不同平台的 GCC Cross Compiler 的執行檔, 另外則含有 Clang 的 Makefile 設定。 (GCC 的 Cross Compile 需要先編成不同的 GCC Binary,Clang 則是有更好的支援,使用 -target 參數選擇即可)

Build Standalone Clang Cross Compile Toolchain

$ android-ndk-r10e/build/tools/make-standalone-toolchain.sh \
    --toolchain=arm-linux-androideabi-clang3.6 \
    --llvm-version=3.6 \
    --arch=arm \
    --abis=armeabi-v7a-hard \
    --platform=android-21 \
    --package-dir=/tmp
Auto-config: --toolchain=arm-linux-androideabi-4.8, --llvm-version=3.6
Copying prebuilt binaries...
Copying sysroot headers and libraries...
Copying c++ runtime headers and libraries...
Creating package file: /tmp/arm-linux-androideabi-4.8.tar.bz2
Cleaning up...
Done.
$ file /tmp/arm-linux-androideabi-4.8.tar.bz2
/tmp/arm-linux-androideabi-4.8.tar.bz2: bzip2 compressed data, block size = 900k

compiler-rt

$ ls -al arm-linux-androideabi-4.8/lib/clang/3.6/lib/linux/
total 7332
-rw-r----- 1 dv dv 2323826 Apr  1 06:26 libclang_rt.asan-arm-android.a
-rw-r----- 1 dv dv   36437 Apr  1 06:27 libclang_rt.asan-arm-android.a.syms
-rwxr-x--- 1 dv dv 1599248 Apr  1 06:27 libclang_rt.asan-arm-android.so*
-rw-r----- 1 dv dv   16596 Apr  1 06:26 libclang_rt.asan_cxx-arm-android.a
-rw-r----- 1 dv dv      73 Apr  1 06:26 libclang_rt.asan_cxx-arm-android.a.syms
-rw-r----- 1 dv dv   14064 Apr  1 06:34 libclang_rt.asan_cxx-i686-android.a
-rw-r----- 1 dv dv 1986448 Apr  1 06:34 libclang_rt.asan-i686-android.a
-rwxr-x--- 1 dv dv 1504988 Apr  1 06:35 libclang_rt.asan-i686-android.so*
-rw-r----- 1 dv dv    2100 Apr  1 06:26 libclang_rt.asan-preinit-arm-android.a
-rw-r----- 1 dv dv    1844 Apr  1 06:34 libclang_rt.asan-preinit-i686-android.a
$ file android-ndk-r10e/toolchains/llvm-3.6/prebuilt/linux-x86_64/lib/clang/3.6/lib/linux/libclang_rt.asan-arm-android.so
android-ndk-r10e/toolchains/llvm-3.6/prebuilt/linux-x86_64/lib/clang/3.6/lib/linux/libclang_rt.asan-arm-android.so: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /system/bin/linker, BuildID[sha1]=414a26fe76bb09de2d0d101e3ed6200da5d1cadc, not stripped