【问题标题】: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 目标。