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

如何在macOS上编译可在AWS EC2实例正常运行的Rust程序

问题根因

两个核心判断错误直接导致问题:

  1. 编译目标选错:t3.micro是x86_64/amd64架构,你贴的内核版本后缀amd64已经明确标注了架构属性,aarch64-unknown-linux-gnu是ARM架构(AWS Graviton系列,比如t4g、c6g实例)的编译目标,和当前实例架构完全不匹配。
  2. 本地编译的二进制天生不兼容:macOS不管是Intel芯片还是M系列芯片,默认cargo build产出的是对应架构的macOS可执行文件,和Linux系统的ABI不兼容,直接传过去必然报Exec format error。
  3. 选aarch64目标编译报链接错误,是因为本地默认的cc是macOS自带的Clang,没有对应目标平台的链接器、系统根文件库,无法直接完成跨平台链接。
可行解决方案

方案1:本地交叉编译(编译完直接传文件到EC2,速度快)

t3.micro对应的正确编译目标是x86_64-unknown-linux-gnu,按以下步骤配置:

  • 先给Rust工具链安装对应目标支持:
    rustup target add x86_64-unknown-linux-gnu
    
  • 用Homebrew安装x86_64 Linux的交叉编译工具链:
    brew install SergioBenitez/osxct/x86_64-unknown-linux-gnu
    
  • 在项目根目录新建.cargo/config.toml配置文件,指定对应目标的链接器:
    [target.x86_64-unknown-linux-gnu]
    linker = "x86_64-unknown-linux-gnu-gcc"
    
  • 执行发布构建:
    cargo build --release --target=x86_64-unknown-linux-gnu
    
    编译完成的二进制在target/x86_64-unknown-linux-gnu/release/目录下,SCP传到EC2后加执行权限即可运行:
    chmod +x 你的二进制文件名
    

方案2:EC2实例内直接编译(零配置,出错概率最低)

不需要折腾本地交叉编译环境,直接在EC2上编译:

  • 把本地的项目源码(不要传之前编译错的二进制)通过SCP传到EC2实例
  • 在EC2上安装Rust环境,按官方安装脚本提示走完流程,安装完成后执行source "$HOME/.cargo/env"加载环境变量
  • 进入项目目录执行发布构建:
    cargo build --release
    
    产出的二进制在target/release/目录下,直接在实例上运行即可,无架构兼容问题。

方案3:Docker跨平台构建(无需本地配置交叉工具链)

如果本地装了Docker,可以直接用官方Rust镜像构建,省去装交叉编译工具的步骤,在项目根目录执行:

docker run --rm -v "$PWD":/app -w /app rust:latest cargo build --release --target x86_64-unknown-linux-gnu

编译完成的二进制路径和方案1一致,直接传到EC2加执行权限就能跑。

补充说明

如果后续换用ARM架构的EC2实例(比如t4g.micro),才需要使用aarch64-unknown-linux-gnu编译目标,对应安装aarch64版本的交叉编译工具链、修改配置里的链接器即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:01:06