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

如何创建带有gcc-multilib的Ubuntu arm64 Docker容器?

如何创建带有gcc-multilib的Ubuntu arm64 Docker容器?

嘿,我太懂你在M1 Mac上想摆脱Rosetta开销的心情了,arm64原生容器跑起来确实顺畅多了!不过你遇到的gcc-multilib和g++-multilib装不上的问题,其实是因为这俩包在arm64架构的Ubuntu里的作用,和你之前i386容器里的完全不一样。

先给你捋明白:在arm64的Ubuntu 22.04里,gcc-multilib和g++-multilib是用来编译**32位ARM(armhf)**程序的,根本不是给x86/i386程序用的。你之前在i386容器里用它是为了支持x86的32位编译,但换到arm64容器后,要交叉编译i386程序的话,得用专门的x86交叉编译工具链,而不是死磕multilib包。

那该怎么改呢?给你两个针对性的解决方案:

如果你要交叉编译i386(x86 32位)程序

把Dockerfile里的gcc-multilib和g++-multilib替换成i386的交叉编译工具链,按需添加i386架构的依赖库就行。修改后的Dockerfile示例如下:

FROM ubuntu:22.04
ARG DEBIAN_FRONTEND=noninteractive
RUN dpkg --add-architecture amd64 && \
    dpkg --add-architecture i386 && \  # 如果你需要i386系统库的话,加上这行
    apt-get update && \
    apt-get install -y -o APT::Immediate-Configure=0 \
            libc6:amd64 \
            libncurses6:amd64 \
            libstdc++6:amd64 \
            build-essential \
            cmake \
            git \
            libncurses6 \
            libncurses-dev \
            libssl-dev \
            mercurial \
            texinfo \
            zip \
            default-jre \
            imagemagick \
            subversion \
            autoconf \
            gcc-i686-linux-gnu \  # 替换gcc-multilib的i386交叉编译工具
            g++-i686-linux-gnu    # 替换g++-multilib的对应工具

之后编译的时候,记得用i686-linux-gnu-gcc和i686-linux-gnu-g++代替原生gcc/g++,或者在cmake里指定编译器:

cmake -DCMAKE_C_COMPILER=i686-linux-gnu-gcc -DCMAKE_CXX_COMPILER=i686-linux-gnu-g++ ..

如果你是想支持arm64下的32位ARM编译

要是你搞错了需求,其实是想在arm64容器里编译32位ARM程序,那可以装armhf对应的multilib包,把原来的两个包换成:

gcc-multilib-arm-linux-gnueabihf
g++-multilib-arm-linux-gnueabihf

这样就能正常安装了,因为这才是arm64系统上对应的multilib包。

总结一下,核心问题就是arm64的multilib和i386的multilib不是一回事,找对对应的工具链就行,不用死磕原来的包名~

备注:内容来源于stack exchange,提问作者udance4ever

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 08:43:07