You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在x86平台构建面向AArch64的LLVM/Clang交叉编译器?

x86平台构建LLVM/Clang AArch64交叉编译器完整步骤

编译器分为两类:

  • 宿主编译器:可在x86、ARM、AArch64主机上编译同平台二进制文件
  • 交叉编译器:可在x86主机上生成AArch64二进制文件

现有资料多聚焦宿主编译器构建,以下是x86平台构建AArch64交叉编译器的具体步骤,同时解决你遇到的链接报错问题。

一、准备工作

  • 获取llvm-project源码包并解压到本地目录
  • (可选)若需要兼容GNU工具链,获取binutils-gdb源码并解压,后续CMake配置时指定其头文件路径

二、CMake配置与编译

你的原有CMake命令未指定默认链接器,导致Clang调用系统x86的ld处理AArch64目标文件而报错。以下是修正后的配置命令:

cmake -G "Unix Makefiles" \
-DCMAKE_BUILD_TYPE="Release" \
-DCMAKE_INSTALL_PREFIX="../dist" \
-DLLVM_TARGETS_TO_BUILD="AArch64;X86" \
-DLLVM_ENABLE_PROJECTS="clang;lld;llvm" \
-DLLVM_BUILD_TOOLS="ON" \
-DLLVM_BINUTILS_INCDIR="../../binutils-gdb/include" \
-DLLVM_INSTALL_BINUTILS_SYMLINKS="ON" \
-DLLVM_BUILD_LLVM_DYLIB="YES" \
-DLLVM_USE_LINKER=gold \
-DLLVM_INCLUDE_EXAMPLES=OFF \
-DLLVM_INCLUDE_TESTS=OFF \
-DLLVM_INCLUDE_BENCHMARKS=OFF \
-DLLVM_APPEND_VC_REV=OFF \
-DLLVM_ENABLE_LIBPFM=OFF \
-DLLVM_ENABLE_DIA_SDK=OFF \
-DCLANG_DEFAULT_LINKER=lld \
-DCLANG_DEFAULT_TARGET_TRIPLE=aarch64-unknown-linux-gnu \
../../llvm-project/llvm && make -j$(nproc)

关键参数说明:

  • LLVM_TARGETS_TO_BUILD="AArch64;X86":必须保留X86目标,确保生成的工具链可在x86主机上运行
  • CLANG_DEFAULT_LINKER=lld:强制Clang默认使用LLVM自带的lld链接器,避免调用系统x86的ld
  • CLANG_DEFAULT_TARGET_TRIPLE=aarch64-unknown-linux-gnu:设置默认目标架构,无需每次编译手动指定--target

三、安装工具链

编译完成后执行安装:

make install

四、验证工具链

  1. 直接编译测试C文件:
../dist/bin/clang -o main main.c

此时会自动使用lld链接AArch64目标文件,不会再出现架构不匹配的报错。

  1. 若未设置默认目标三元组,可手动指定:
../dist/bin/clang --target=aarch64-unknown-linux-gnu -fuse-ld=lld -o main main.c

五、解决链接入口符号缺失问题

你分开编译链接时出现的cannot find entry symbol _start,是因为未链接标准库。完整编译命令需添加标准库链接:

../dist/bin/clang --target=aarch64-unknown-linux-gnu -fuse-ld=lld -o main main.c -lc

若需要更完整的C标准库支持,可在CMake配置时添加compiler-rt;libcxx;libcxxabi到LLVM_ENABLE_PROJECTS,构建LLVM自带的标准库。

内容的提问来源于stack exchange,提问作者lol lol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 13:03:31