如何让源码编译的Clang自动适配AArch64交叉编译依赖?
解决源码编译Clang无法自动识别AArch64交叉编译库的问题
源码编译的Clang没法自动找到AArch64交叉编译库,核心原因是编译LLVM/Clang时没把目标架构的工具链信息内置进去,而预编译版已经做了对应配置。可以通过以下方式解决:
1. 重新编译Clang时指定交叉工具链参数
这是最彻底的解决办法,在CMake配置阶段就把AArch64的sysroot和GCC工具链路径告诉编译器:
先确保系统已安装AArch64交叉编译依赖:
sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc6-dev-arm64-cross
然后在LLVM源码的build目录下执行CMake命令:
cmake -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DLLVM_TARGETS_TO_BUILD="AArch64;X86" \ # 同时支持宿主X86和目标AArch64架构 -DCLANG_DEFAULT_TARGET_TRIPLE=aarch64-linux-gnu \ -DLLVM_DEFAULT_TARGET_TRIPLE=aarch64-linux-gnu \ -DCMAKE_SYSROOT=/usr/aarch64-linux-gnu \ -DGCC_INSTALL_PREFIX=/usr/aarch64-linux-gnu \ ../llvm
接着用ninja完成编译安装,新编译的Clang就会自动识别AArch64的交叉库。
2. 给已编译的Clang添加全局配置
如果不想重新编译,可以通过Clang的配置文件让它每次启动自动加载交叉编译参数:
- 创建Clang的全局配置目录(若不存在):
sudo mkdir -p /etc/clang - 在
/etc/clang/config文件中添加以下内容:
之后调用Clang时,这些参数会自动生效,无需手动指定。--target=aarch64-linux-gnu --sysroot=/usr/aarch64-linux-gnu --gcc-toolchain=/usr/aarch64-linux-gnu
3. 验证配置是否成功
执行以下命令检查输出:
clang -v --target=aarch64-linux-gnu --sysroot=/usr/aarch64-linux-gnu
如果输出里出现类似以下内容,说明配置生效:
Found candidate GCC installation: /usr/aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/11
Selected GCC installation: /usr/aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/11
此时再编译依赖<fstream>的代码,就能自动找到头文件并完成链接。
内容的提问来源于stack exchange,提问作者muke
相关产品推荐
相关产品推荐

