我正在尝试为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
文件夹