该最新版本NDK R11说:
我们强烈建议您切换到Clang.
使用NDK建立类似的OpenSSL开放源码库时,你怎么在这在实践中,你需要将所有像通常的环境变量CPP,CC,CXX,等...?
我看到的llvm/prebuilt/darwin-x86_64/bin/是clang和clang++,但没有cpp或ld工具,等等.相反的是在arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin拥有阳光下的每一个工具可能.
我们应该混合搭配吗?即使用ld与cpp从arm-linux-androideabi-4.9同时clang从llvm?
[更新]作为参考,这是我使用r10 NDK的配置:
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"
Run Code Online (Sandbox Code Playgroud)
是的,当使用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"
Run Code Online (Sandbox Code Playgroud)
对于CPP,AR和RANLIB,最好使用与现在相同的方法。对于LD,如果您当前直接指的是低级ld工具,则可能应该坚持下去。如果要使用gcc前端进行链接,则应将其切换为使用clang。但是在那种情况下,脚本可能会$CC用于链接而不是使用链接$LD。
另一种方法是使用build/tools/make_standalone_toolchain.py.这将构建一个完整的工具链目录,您可以直接调用clang而无需担心管理-gcc-toolchain和--sysroot自己.
编辑:更新以引用新工具并删除警告部分,因为那里的问题现在都应该修复.
| 归档时间: |
|
| 查看次数: |
3724 次 |
| 最近记录: |