aarch64架构Ubuntu构建带i386依赖项目报404如何解决
问题根因
这个404报错和源地址配置错误无关,本质是aarch64(ARM64)版本的Ubuntu官方软件源完全不提供i386(x86 32位)架构的软件包:
- i386属于x86指令集的32位标准,和ARM64指令集完全不兼容,原生ARM系统不能直接通过multiarch多架构机制安装运行i386包
- 你之前参考的i386源修复方案仅适用于amd64(x86_64)版本的Ubuntu,在aarch64系统上完全不生效。
可行解决方案
按优先级从高到低选择即可:
方案1:原生aarch64环境直接构建(无兼容层开销,推荐优先尝试)
先梳理项目构建逻辑:该项目添加i386架构的目的通常是为了安装32位兼容库,但实际RISCV交叉编译、仿真相关的工具链全部提供aarch64原生版本,不需要依赖i386包。
操作步骤:
- 先移除之前错误添加的i386架构,修复apt持续报错的问题
sudo dpkg --remove-architecture i386 sudo apt update
- 拉取项目代码后修改Makefile:
- 删掉
sudo dpkg --add-architecture i386这行命令 - 把所有安装依赖项后面带的
:i386后缀全部删掉
- 删掉
- 直接执行make,跟随提示安装对应arm64版本的依赖包即可完成构建。
方案2:i386 chroot环境配合qemu用户态翻译
如果确实有部分闭源依赖只有i386版本,可以在现有aarch64系统内创建i386隔离运行环境:
- 先执行方案1中的清理命令,移除全局的i386架构配置
- 安装所需的基础工具:
sudo apt install qemu-user-static schroot debootstrap
- 创建i386版本的Ubuntu最小根文件系统,版本和你当前使用的focal(20.04)保持一致:
sudo debootstrap --arch=i386 --foreign focal /opt/i386-chroot sudo cp /usr/bin/qemu-i386-static /opt/i386-chroot/usr/bin/ sudo chroot /opt/i386-chroot /debootstrap/debootstrap --second-stage
- 配置schroot方便快速进入隔离环境,新建
/etc/schroot/chroot.d/i386.conf写入如下配置,将其中的用户名替换为你当前登录的系统用户名:
[i386] description=Ubuntu 20.04 i386 directory=/opt/i386-chroot root-users=你的用户名 type=directory users=你的用户名
- 执行
schroot -c i386即可进入i386隔离环境,在环境内正常执行apt更新、安装依赖、构建项目的流程即可。
方案3:使用x86架构虚拟环境
如果你的虚拟化平台支持创建x86架构虚拟机,直接安装amd64版本的Ubuntu 20.04即可,amd64版本的Ubuntu源原生支持i386多架构,不需要额外配置,直接执行项目自带的Makefile就能完成构建。
如果不想额外创建虚拟机,也可以在现有aarch64系统上用容器运行32位x86的Ubuntu镜像,靠qemu自动完成跨架构翻译,启动容器后直接构建即可,比手动配置chroot更简便。
注意:跨架构翻译运行会有一定性能损耗,如果构建流程较长,优先选择原生构建或者x86虚拟机方案。
内容的提问来源于stack exchange,提问作者student213
相关产品推荐
相关产品推荐

