交叉编译clang为Android手臂



我正在尝试为Android arm交叉编译llvm/clang。

我将CC/CXX变量导出到arm-linux-androideabi交叉编译器,然后从我的构建文件夹中执行:

cmake -G "Unix Makefiles" --target arm-linux-androideabi --sysroot=$NDK/platforms/android-21/arch-arm/ ../llvm 

构建文件夹与llvm源代码在同一个目录下。

我得到错误:

rm-linux-androideabi-g++: error: unrecognized command line option '-m32'

我知道,它与g++ multilib for arm-linux有关,但我在NDK中找不到它。

我也尝试了这里列出的所有步骤,以及这里找到的指南,没有运气。

任何帮助都将非常感激。谢谢!

编辑:现在我使用以下命令:

cmake -G "Unix Makefiles"——prefix=../outarm——目标arm-linux-androideabi——sysroot = $ NDK/平台/android-21/arch-arm/-DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PIC=False -DCMAKE_CROSSCOMPILING=True -DLLVM_TABLEGEN=../osxbuild/bin/llvm-tblgen -DCLANG_TABLEGEN = . ./osxbuild/bin/clang-tblgen -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM ./llvm

现在开始编译,但它在14%处停止,并出现错误:

arm-linux-androideabi-g++: error:无法识别的命令行选项"包"

EDIT2:我将所有的相对路径都删除为绝对路径。并将编译器从gcc改为clang。Clang识别出了-bundle,但没有使用它。完整的命令w/错误现在是:命令:

cmake -G "Unix Makefiles"-DCMAKE_INSTALL_PREFIX=$HOME/Desktop/clang-compilation/outarm -DCMAKE_BUILD_TYPE=Release -DLLVM_DEFAULT_TARGET_TRIPLE= ARM -linux-androideabi——sysroot=$NDK/platforms/android-21/arch-arm/-DLLVM_ENABLE_PIC=False -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DLLVM_TABLEGEN=$HOME/Desktop/clang-compilation/osxbuild/bin/llvm-tblgen . exe-DCLANG_TABLEGEN = $ HOME/桌面/clang-compilation/osxbuild/bin/clang-tblgen-DCMAKE_CXX_FLAGS='-I$HOME/android/toolchains/gcc/include/c++/4.9/arm-linux-androideabi -I$HOME/android/toolchains/gcc/include/' $HOME/Desktop/clang-compilation/llvm

使纺纱,

错误信息:clang36++: warning:编译期间未使用的参数:'-bundle'/用户/paschalis/android/工具链/gcc/bin/. ./lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: fatal error: -f/——auxiliary不能在没有-shared

时使用

为android构建clang最简单的方法是:

  • 下载AOSP
  • 从AOSP根(source build/envsetup.sh)设置构建命令
  • cd到平台/external/llvm(查看更多信息)
  • 运行mm命令构建
  • cd to AOSP root/platform/ndk
  • 运行build/tools/build-llvm.py(见这里)
  • 最后的包将在AOSP/out文件夹

最新更新