【问题标题】:Cross compile clang for Android armAndroid arm的交叉编译clang
【发布时间】:2015-10-21 04:49:12
【问题描述】:

我正在尝试为 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 列出的所有步骤,并且指南找到了here,但没有运气。

任何帮助将不胜感激。谢谢!

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

cmake -G "Unix Makefiles" --prefix=../outarm --target arm-linux-androideabi --sysroot=$NDK/platforms/android-21/arch-arm/ -DCMAKE_BUILD_TYPE=发布 -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++:错误:无法识别的命令行选项 '-捆绑'

编辑2: 我删除了所有到绝对路径的相对路径。 并将编译器从 gcc 更改为 clang。 Clang 识别-bundle,但它不使用它。现在带有错误的完整命令是: 命令:

cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=$HOME/Desktop/clang-compilation/outarm -DCMAKE_BUILD_TYPE=发布 -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

制作-j12

错误信息: clang36++:警告:编译期间未使用的参数:'-bundle' /Users/paschalis/android/toolchains/gcc/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld:致命错误:-f/--auxiliary 不能在没有 -shared 的情况下使用

【问题讨论】:

  • 经过几天与交叉编译标志和依赖项的斗争,我设法获得了一个工作编译器。我稍微修改了这个 work,并构建了 clang、gcc 以及它们的所有依赖项!
  • 你能指点脚本/补丁来构建clang吗?

标签: android android-ndk clang cross-compiling llvm-clang


【解决方案1】:

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

  • 下载AOSPas described here
  • 从 AOSP 根目录 (source build/envsetup.sh) 设置构建命令
  • cd 到平台/外部/llvm (see more info here)
  • 运行mm命令构建
  • cd 到AOSP root/platform/ndk
  • 运行build/tools/build-llvm.py (see here)
  • 最终包将在AOSP/out文件夹中

【讨论】:

  • 感谢您的建议!这些问题主要是因为某些库在 Android 上丢失或被剥离。我envsetup 然后运行make clang
  • @Paschalis 你有没有成功
  • 没有。 aosp 构建失败。不过还是谢谢!不过我并没有付出太多努力,因为我专注于termux-packages。我过去已经构建了 aosp 的一部分,只是还没有任何外部项目(成功)!
  • @Paschalis 在 AOSP 中完全使用 mm 命令而不是 make
  • 既然我已经成功编译了它,我不会再尝试使用aosp源代码了。但是,如果您确定 mm 有效,我会相信您的话并接受这个答案!
猜你喜欢
  • 2013-01-19
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 2014-06-13
  • 1970-01-01
  • 2016-05-26
  • 2021-02-17
  • 2016-03-25
相关资源
最近更新 更多