Mac M1构建Rust x86_64 Linux Docker镜像报错'-m64'选项未识别
错误根因
- 你的Mac M1是arm64架构,默认启动的Docker构建容器也是arm64架构,容器内默认的
cc编译器适配arm64架构,无法识别x86_64架构专属的-m64编译参数 - 你已经安装了x86_64交叉编译工具链
gcc-x86-64-linux-gnu,但未配置Cargo使用该工具链作为x86_64目标的链接器,导致Cargo仍然调用默认的arm64版本cc进行链接,触发报错
修复方案
方案1:使用交叉编译(构建速度快)
在Dockerfile中cargo build命令之前,新增2行环境变量配置,指定x86_64 musl目标对应的交叉编译器即可:
FROM rust:latest AS builder RUN rustup target add x86_64-unknown-linux-musl RUN apt update && apt install -y musl-tools musl-dev RUN apt-get install -y build-essential RUN yes | apt install gcc-x86-64-linux-gnu # Create appuser ENV USER=my-user ENV UID=10001 RUN adduser \ --disabled-password \ --gecos "" \ --home "/nonexistent" \ --shell "/sbin/nologin" \ --no-create-home \ --uid "${UID}" \ "${USER}" WORKDIR /my-service COPY ./ . # 新增以下两行配置 ENV CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_LINKER=x86_64-linux-gnu-gcc ENV CC_x86_64_unknown_linux_musl=x86_64-linux-gnu-gcc RUN cargo build --target x86_64-unknown-linux-musl --release
方案2:模拟x86_64架构构建(兼容性更好)
不需要修改Dockerfile,直接在构建镜像时指定目标架构,Docker会通过QEMU模拟x86_64环境完成构建,如果你的Rust项目依赖第三方C语言库,优先选择方案2,可大幅减少交叉编译带来的依赖适配问题,缺点是构建速度比原生交叉编译慢:
docker buildx build --platform linux/amd64 -t 你的镜像名 .
内容的提问来源于stack exchange,提问作者themonkey
相关产品推荐
相关产品推荐

