【问题标题】:How do I compile Rust on MacOS, to be run on an AWS EC2 instance? "cannot execute binary file: Exec format error"如何在 MacOS 上编译 Rust 以在 AWS EC2 实例上运行? \"无法执行二进制文件:Exec 格式错误\"
【发布时间】:2022-11-18 03:18:25
【问题描述】:

问题

我在 Macbook 上编写了一些相当简单的 Rust 代码,部署在 AWS EC2 实例上,但是当我跨过 SCP 二进制文件并运行它时,我遇到了“bash-program-cannot-execute-binary-file-exec-format-error

Mac 详细信息

  • 产品名称:macOS
  • 产品版本:12.4
  • 构建版本:21F79

AWS 详情

  • 实例类型:t3.micro
  • uname -r: 5.10.0-10-cloud-amd64

尝试的解决方案

我知道我的机器与 EC2 机器的架构不匹配,因为 EC2 是 Debian,我假设我想要的目标类型是“aarch64-unknown-linux-gnu”,但运行 cargo build --target=aarch64-unknown-linux-gnu 结果在“错误:与cc链接失败:退出状态:1 "带有很长的音符。

【问题讨论】:

    标签: macos amazon-ec2 rust compiler-errors cross-compiling


    【解决方案1】:

    我发现做类似事情的最简单方法是使用cross。这是一个货物扩展,它将引入交叉编译到不同架构所需的所有依赖项。命令格式特意与 cargo 相同:

    例如

    cross build --release --target aarch64-unknown-linux-gnu
    

    您可以在他们的维基页面上找到设置说明:https://github.com/cross-rs/cross#installation

    至于实际的错误,我认为仅在 cargo 中设置目标的问题在于 rust 仍将取决于已安装的 libc,它将用于本机架构。 cross 通过使用 docker 镜像解决这个问题。

    【讨论】:

      【解决方案2】:

      看起来目标架构不是基于 arm 的。AMD 应该需要一个 x86_64 目标。

      【讨论】:

        猜你喜欢
        • 2023-01-27
        • 1970-01-01
        • 1970-01-01
        • 2020-06-28
        • 2016-04-13
        • 1970-01-01
        • 2017-12-02
        • 1970-01-01
        • 2020-12-04
        相关资源
        最近更新 更多