如何设置构建环境变量以将Clang用作NDK的一部分?

时间:2016-03-18 03:17:23

标签: android-ndk

latest NDK release r11说:

  

我们强烈建议您切换到Clang。

在使用NDK构建开源库(如OpenSSL)时,如何实现这一点,并且需要设置所有常用的环境变量,如CPPCCCXX等...?

我在llvm/prebuilt/darwin-x86_64/bin/中看到的只有clangclang++,但没有cppld工具等......与“{1}}相反在arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin中,它可以在阳光下使用各种工具。

我们应该混合搭配吗?即从ld cpp使用arm-linux-androideabi-4.9clang时使用llvmAPI_LEVEL="18" HOST="arm-linux-androideabi" export ANDROID_NDK="$HOME/Library/Android/sdk/ndk-bundle" export NDK_PLATFORM="$ANDROID_NDK/platforms/android-$API_LEVEL/arch-arm" export NDK_TOOLCHAIN="$ANDROID_NDK/toolchains/$HOST-4.9/prebuilt/darwin-x86_64" export CPP="$NDK_TOOLCHAIN/bin/$HOST-cpp --sysroot=$NDK_PLATFORM" export CC="$NDK_TOOLCHAIN/bin/$HOST-gcc --sysroot=$NDK_PLATFORM" export CXX="$NDK_TOOLCHAIN/bin/$HOST-g++ --sysroot=$NDK_PLATFORM" export LD="$NDK_TOOLCHAIN/bin/$HOST-ld --sysroot=$NDK_PLATFORM" export AR="$NDK_TOOLCHAIN/bin/$HOST-ar" export RANLIB="$NDK_TOOLCHAIN/bin/$HOST-ranlib"

[更新]作为参考,这里是我使用r10 NDK的配置:

.header{
 top: 0px;width: 100%;min-width: 980px;
 height: 70px;position: fixed;
}

2 个答案:

答案 0 :(得分:5)

另一种方法是使用build/tools/make_standalone_toolchain.py。这将构建一个完整的工具链目录,您可以直接调用clang,而无需担心自己管理-gcc-toolchain--sysroot

编辑:更新以引用新工具并删除了警告部分,因为那里的问题现在都应该修复。

答案 1 :(得分:4)

是的,当使用clang时,它会回退到使用普通gcc工具链中的一些普通gnu binutils。 (clang / llvm环境正在获取他们自己的链接器,lld,但我相信NDK中的构建仍然只使用gnu binutils版本。)

与gcc工具链相反,NDK中只有一个llvm / clang工具链,可以锁定所有必需的拱门。这也意味着您需要将参数传递给它,以告诉它您打算编译的内容。

对于您的构建脚本,您应该能够使用以下内容替换至少CC和CXX:

export CC="$ANDROID_NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang -target armv7-none-linux-androideabi -gcc-toolchain $NDK_TOOLCHAIN"
export CXX="$ANDROID_NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ -target armv7-none-linux-androideabi -gcc-toolchain $NDK_TOOLCHAIN"

对于CPP,AR和RANLIB,您最好只使用与现在相同的效果。对于LD,如果您目前直接引用低级ld工具,那么您应该坚持这一点。如果您使用gcc前端进行链接,则应将其切换为使用clang。但在这种情况下,脚本可能会使用$CC进行链接而不是$LD