Android arm 的交叉编译 clang
Cross compile clang for Android arm
我正在尝试为 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
build文件夹与llvm源代码在同一目录下。
我收到错误:
rm-linux-androideabi-g++: error: unrecognized command line option '-m32'
我知道,它与 g++ multilib
for arm-linux
有关,但我在 NDK 中找不到它。
我也尝试了列出的所有步骤 here, and the guide found here,但没有成功。
如有任何帮助,我们将不胜感激。谢谢!
编辑:
现在我正在使用以下命令:
cmake -G "Unix Makefiles" --prefix=../outarm --target
arm-linux-androideabi --sysroot=$NDK/platforms/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: unrecognized command line option
'-bundle'
编辑2:
我删除了所有相对路径到绝对路径。
并将编译器从 gcc 更改为 clang。 Clang 识别 -bundle
,但不使用它。现在带有错误的完整命令是:
命令:
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
-DCLANG_TABLEGEN=$HOME/Desktop/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
make -j12
错误信息:
clang36++: 警告:编译期间未使用的参数:'-bundle'
/Users/paschalis/android/toolchains/gcc/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld:致命错误:-f/--auxiliary 不能在没有 -shared[ 的情况下使用=20=]
为 android 构建 clang 的最简单方法是:
- 下载 AOSP as described here
- 从 AOSP 根 (
source build/envsetup.sh
) 安装构建命令
- cd 到 platform/external/llvm (see more info here)
- 运行
mm
命令构建
- cd 到
AOSP root/platform/ndk
- 运行
build/tools/build-llvm.py
(see here)
- 最终包将在
AOSP/out
文件夹中
我正在尝试为 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
build文件夹与llvm源代码在同一目录下。
我收到错误:
rm-linux-androideabi-g++: error: unrecognized command line option '-m32'
我知道,它与 g++ multilib
for arm-linux
有关,但我在 NDK 中找不到它。
我也尝试了列出的所有步骤 here, and the guide found here,但没有成功。
如有任何帮助,我们将不胜感激。谢谢!
编辑: 现在我正在使用以下命令:
cmake -G "Unix Makefiles" --prefix=../outarm --target arm-linux-androideabi --sysroot=$NDK/platforms/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: unrecognized command line option '-bundle'
编辑2:
我删除了所有相对路径到绝对路径。
并将编译器从 gcc 更改为 clang。 Clang 识别 -bundle
,但不使用它。现在带有错误的完整命令是:
命令:
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 -DCLANG_TABLEGEN=$HOME/Desktop/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
make -j12
错误信息: clang36++: 警告:编译期间未使用的参数:'-bundle' /Users/paschalis/android/toolchains/gcc/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld:致命错误:-f/--auxiliary 不能在没有 -shared[ 的情况下使用=20=]
为 android 构建 clang 的最简单方法是:
- 下载 AOSP as described here
- 从 AOSP 根 (
source build/envsetup.sh
) 安装构建命令 - cd 到 platform/external/llvm (see more info here)
- 运行
mm
命令构建 - cd 到
AOSP root/platform/ndk
- 运行
build/tools/build-llvm.py
(see here) - 最终包将在
AOSP/out
文件夹中