从x86_64交叉编译AArch64版GCC时--host参数如何配置?
解决方案
1. 错误根源
你使用的--host=aarch64-arm64-linux-gnu是无效的三元组格式:
- aarch64本身就是arm64的标准架构名,重复书写会导致工具链无法识别
- 三元组的
company字段并非必须是真实厂商名,unknown是GNU工具链支持的标准占位符,目标机给出的aarch64-unknown-linux-gnu才是正确格式
2. 修正流程
步骤1:安装交叉编译工具链
在Ubuntu构建机上安装aarch64-linux-gnu交叉工具链:
sudo apt update && sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu binutils-aarch64-linux-gnu
步骤2:重新运行configure
使用正确的三元组参数执行配置,推荐使用独立构建目录(out-of-tree构建):
mkdir build-gcc && cd build-gcc ../gcc-13.1.0/configure \ --build=x86_64-pc-linux-gnu \ --host=aarch64-unknown-linux-gnu \ --target=aarch64-unknown-linux-gnu \ --prefix=/opt/gcc-13.1.0-aarch64 \ --enable-languages=c,c++ \ --disable-multilib
--build:构建机的标准三元组,可省略让configure自动检测--prefix:指定编译完成后的安装路径,可自行修改--enable-languages:指定要编译的语言,按需添加--disable-multilib:针对aarch64系统禁用多库支持,避免不必要的编译错误
步骤3:编译与安装
使用多核加速编译,然后完成安装:
make -j$(nproc) sudo make install
3. 关于三元组company字段的说明
GCC的三元组格式cpu-company-system中:
company字段可以是实际厂商名(如intel、arm),也可以是unknown(无需指定特定厂商时),甚至可用pc表示通用PC系统- 核心要求是三元组必须能被GCC源码中的
config.sub脚本识别,可通过以下命令验证格式有效性:
若返回相同字符串,则格式有效。./config.sub aarch64-unknown-linux-gnu
内容的提问来源于stack exchange,提问作者Qwert Yuiop
相关产品推荐
相关产品推荐

