一尘不染

从Linux到Windows交叉编译Rust应用程序

linux

基本上,我在Linux上进行开发时,尝试将最简单的代码编译到Windows。

fn main() {
    println!("Hello, and bye.")
}

我通过搜索互联网找到了这些命令:

rustc --target=i686-w64-mingw32-gcc  main.rs
rustc --target=i686_pc_windows_gnu -C linker=i686-w64-mingw32-gcc  main.rs

可悲的是,它们都不起作用。它给我关于标准箱丢失的错误

$ rustc --target=i686_pc_windows_gnu -C linker=i686-w64-mingw32-gcc  main.rs

main.rs:1:1: 1:1 error: can't find crate for `std`
main.rs:1 fn main() {
          ^
error: aborting due to previous error

有没有办法在Windows上运行的Linux上编译代码?


阅读 900

收藏
2020-06-07

共1个答案

一尘不染

Rust发行版仅提供主机系统的编译库。但是,根据Rust上Arch
Linux的Wiki页面
,您可以从系统目录中适当位置(位于/usr/lib/rustlib或中/usr/local/lib/rustlib,具体取决于Windows)的Windows包中,从下载目录中复制编译的库(请注意,有i686和x86-64包)。安装Rust的地方),安装mingw-w64-gcc和Wine,您应该可以交叉编译。

如果您使用的是Cargo,则可以ar通过将其添加到~/.cargo/config$ARCH要使用的架构在哪里)来告诉Cargo在哪里寻找和链接器:

[target.$ARCH-pc-windows-gnu]
linker = "/usr/bin/$ARCH-w64-mingw32-gcc"
ar = "/usr/$ARCH-w64-mingw32/bin/ar"

注意:确切的路径可能会因您的分布而异。检查分发中mingw-w64软件包(GCC和binutils)的文件列表。

然后,您可以像这样使用货运:

$ # Build
$ cargo build --release --target "$ARCH-pc-windows-gnu"
$ # Run unit tests under wine
$ cargo test --target "$ARCH-pc-windows-gnu"
2020-06-07