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

MacOS(Apple Silicon)编译Dockerfile安装g++-multilib等依赖报错

问题原因

这是典型的架构兼容问题,和Dockerfile写法、VSCode Remote Container配置本身无关:

  • 你Windows设备是x86_64架构,Docker默认拉取linux/amd64版本的Ubuntu 18.04镜像,g++-multilib、libc6-dev-i386本身就是x86平台专属的32位编译依赖包,用来给x86设备提供i386架构的库支持,在amd64镜像里可以正常安装。
  • Apple Silicon芯片是arm64(aarch64)架构,默认拉取的是linux/arm64版本的Ubuntu 18.04镜像,Ubuntu官方arm64源根本不提供i386架构的兼容包,安装这两个包的时候自然会报依赖找不到、架构不匹配的错误。
可行解决方法

根据你的实际需求选一个就行:

  • 如果你不想改原有项目编译配置,直接强制Docker拉取amd64版本的镜像通过模拟运行:把Dockerfile第一行的FROM ubuntu:18.04改成FROM --platform=linux/amd64 ubuntu:18.04即可。第一次启动容器时Docker会自动加载x86模拟层,记得在Docker Desktop设置里开启Rosetta x86模拟选项,能把转译性能拉到很高,日常跑ns-3仿真完全够用,唯一缺点是超大规模编译的时候速度会比原生arm容器稍慢。
  • 如果你不需要编译32位版本的程序,直接删掉Dockerfile最后一行里的g++-multilib libc6-dev-i386即可。这两个包唯一的作用就是提供x86 32位程序的编译依赖,ns-3默认编译的是64位程序,完全用不上这两个包,删掉之后容器会用原生arm64架构运行,没有任何性能损耗,是最省事的方案。
  • 如果你确实需要在arm设备上编译32位程序,不要装i386架构的包,先执行dpkg --add-architecture armhf && apt update添加arm32架构源,再安装g++-arm-linux-gnueabihf、libc6-dev:armhf这类arm32的交叉编译工具链,不过这种方案需要你手动修改项目的编译配置指定工具链,适配成本较高。
补充提示

你现在用的Ubuntu 18.04已经过了官方标准支持周期,软件源已经迁移到归档服务器,后续装包很容易出现404错误,如果不是项目强依赖18.04的特定版本库,建议替换成Ubuntu 22.04/24.04这类还在支持周期的LTS版本,兼容性和稳定性更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 23:54:21