使用M1 Mac将Rust程序编译为可执行文件?

4

我在我的M1 Mac上用Rust编写了一个程序,并成功地将其编译为Unix可执行文件。现在我也想将其编译为Windows可执行文件。我首先尝试了

$ cargo target add x86_64-pc-windows-gnu
$ cargo build --release --target=x86_64-pc-windows-gnu

我收到了以下错误信息:

错误:链接器x86_64-w64-mingw32-gcc未找到

所以我尝试了以下方法:

$ brew install mingw-w64

根据这个,我遇到了以下错误:

Error: mingw-w64: no bottle available!

我在formulae.brew.sh上查看,发现只有Intel支持mingw-w64,不支持M1。

我该如何使用我的M1 Mac从Rust编译exe文件?

2个回答

10

解决方案1:

您可以使用以下命令安装/添加目标:

rustup target add x86_64-pc-windows-gnu
rustup toolchain install stable-x86_64-pc-windows-gnu

你可以从你的Mac操作系统中针对Windows进行操作:

cargo build --release --target=x86_64-pc-windows-gnu

解决方案2:简单使用Docker!
FROM mcr.microsoft.com/windows/servercore:ltsc2019
// install rust
COPY project c:/project
RUN cd c:/project && cargo build --release

解决方案3: 还有一种方法是使用Cross。你可以使用它来进行交叉编译: https://github.com/rust-embedded/cross


3
我尝试了解决方案1,但仍然得到“错误:找不到链接器'x86_64-w64-mingw32-gcc'”。 - Omnikar
如果 x86_64-w64-mingw32-gcc 不存在,您可能需要通过 brew install mingw-w64 进行安装。 - Joshua Stephen

3

我来分享一下几个新的解决方案,这些解决方案对我非常有效:

cargo-zigbuild

目标平台(*-pc-windows-gnu afaik):

  • i686-pc-windows-gnu
  • x86_64-pc-windows-gnu

cargo-zigbuild 还支持直接跨平台编译,无需容器化!

以下是一个快速示例:

brew install zig
cargo install cargo-zigbuild
cargo zigbuild --target x86_64-pc-windows-gnu -r

cargo-xwin

目标(*-msvc afaik):

  • aarch64-pc-windows-msvc
  • i586-pc-windows-msvc
  • i686-pc-windows-msvc
  • x86_64-pc-windows-msvc

快速示例:

cargo install cargo-xwin
cargo xwin build --target x86_64-pc-windows-msvc -r

我该选择哪一个?

请参见:gnu和msvc工具链之间的区别是什么?

简而言之:使用msvc/cargo-xwin生成“更本地”的Windows二进制文件(大小更小),并使用gnu/cargo-zigbuild来帮助移植Linux特定的应用程序。


我在我的M1 Mac上使用cargo-xwin成功完成了这个任务,非常感谢你提供的清晰简洁的答案。 - Dan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接