latest NDK release r11说:
我们强烈建议您切换到Clang。
在使用NDK构建开源库(如OpenSSL)时,如何实现这一点,并且需要设置所有常用的环境变量,如CPP
,CC
,CXX
等...?
我在llvm/prebuilt/darwin-x86_64/bin/
中看到的只有clang
和clang++
,但没有cpp
或ld
工具等......与“{1}}相反在arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin
中,它可以在阳光下使用各种工具。
我们应该混合搭配吗?即从ld
cpp
使用arm-linux-androideabi-4.9
和clang
时使用llvm
和API_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;
}
答案 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
。