来自 Once_cell 的 Linux 编译错误的 Cargo 构建?

问题描述 投票:0回答:1

我有一个货物工作区项目,我在 Windows 笔记本电脑上构建并运行该项目。该程序托管一个后端服务器。现在,我想将其托管在 AWS EC2 实例(Linux 机器)上。我想我要做的是首先为 Linux 构建 Cargo,然后简单地将 .exe 放入 ec2 实例并从那里运行它。

我尝试了两件事(在我的 Windows 机器上):

我)

cargo build --target=x86_64-unknown-linux-gnu
- 这给了我一些非常奇怪的编译错误,比如
error[E0412]: cannot find type `Result` in this scope;  error: could not compile `once_cell` due to 223 previous errors

ii) 尝试另一个目标:

cargo build --target=aarch64-unknown-linux-gnu
得到了几乎相同的东西。

这是once_cell的一些限制吗?或者,更有可能的是,我在这里遗漏了一些基本的东西?

linux amazon-web-services rust rust-cargo
1个回答
0
投票

您收到的错误表明找不到标准库。从 Windows 交叉编译到 Linux 时,最好使用

*-musl
目标,以避免必须提供
*-gnu
目标所需的 Linux 特定库。要修复错误,只需运行以下命令:

rustup target add x86_64-unknown-linux-musl

这将安装相关的stdlib。您必须对您打算交叉编译的每个工具链执行此操作(如果您想同时使用稳定版和夜间版或其他工具链)。

如果此时您

cargo build
,您应该得到链接器错误,而不是一堆编译器错误。要解决此问题,请将以下行添加到您的
.cargo/config.toml
文件中:

[target.x86_64-unknown-linux-musl]
linker = "rust-lld"

这应该足以构建东西,尽管有些板条箱可能有平台/工具链要求,可能需要更多努力才能满足。

当然,这是假设亚马逊的 ec2 实例实际上是 x86_64 机器,但它们可能不是。类似的步骤应该适用于其他平台,只需使用所需的目标即可。例如,要构建 64 位 Arm 平台,您只需使用相同的步骤,但目标为

aarch64-unknown-linux-musl
,我使用这些步骤和
armv7-unknown-linux-musleabihf
来为我的树莓派构建内容。

© www.soinside.com 2019 - 2024. All rights reserved.