error: linker `x86_64-w64-mingw32-gcc` not found

error: linker `x86_64-w64-mingw32-gcc` not found

我正在使用 MacOS Big Sur,我正在尝试交叉编译到 windows,但问题是,这个“错误:链接器 x86_64-w64-mingw32-gcc 未找到”阻止我这样做,这是我的货物依赖项:

[dependencies]
rand = "0.8.4"
macroquad = "0.3.13"
perlin_rust = "0.1.0"
libm = "0.2.2"

我试过 Cargo Clean/Update,我试过 mvsc 而不是 gnu

TLDR;
除了使用 rustup 安装 cross 目标之外,您还需要安装一个实际的 cross 链接器,并使用 cargo 配置文件或环境变量

将其告知 cargo

您似乎正试图 cross 编译您的包。 您可以在这里阅读更多关于 cross compilation 的信息; 简而言之,编译器是一个程序,它获取您的文本源代码并生成您的操作系统和 cpu 可以理解的内容。

当您为正在开发的平台构建软件时,一切都很好。您拥有所有工具,但是当您想要针对 os 的另一个平台时,您需要一个编译器,该编译器可以在您的 machine 上运行,但输出一个支持 os 的二进制文件在目标 platform/os.

上工作

因此,在您的情况下,您需要为 mac 安装一个用于 mingw 目标的 cross 工具链,因为 Rust 本身没有 cross 链接器。一旦你得到一个 cross 工具链,你需要做的就是告诉 cargo 如何找到它。

Here 是一个旨在让 cros 的编译不那么痛苦的项目。

我也强烈建议你阅读the cargo book 在这里你可以看到一种告诉货物关于 cross 链接器的方法 另一种方法是使用环境变量(我更喜欢它并且更容易与 makefile 一起使用) 在下面,您可以从我的一个 makefile 中看到一个示例 又一次 the cargo book refers to it

总的来说 cross 编译是痛苦的,我花了很长时间来理解它的机制,但它是值得的,而不是我在博客上找到的复制粘贴命令。 我也觉得它缺乏严格的文档。 Cargo book 没有告诉您任何有关寻找链接器的信息,假设您已经知道这一点,并且图片 cross 编译为在安装带有 rustup 的目标工具链后开箱即用的东西。