您现在的位置是:首页 > 文章详情

Rust 交叉编译 macOS 为 Linux 和 Windows

日期:2024-02-28点击:199

[toc]

前言

鉴于 rust 中文资料较少,遇到问题的解决方案更少。这里记录遇到的一些问题。

> Rust 支持交叉编译,可以在 macOS 平台编译出 Linux 或者 Windows 可运行的程序,或者在 Linux 平台编译 macOS 或者 Windows 可运行的程序。 > > 本文主要文章讲解Mac平台编译为其他平台的二进制程序。

想要实现跨平台编译且可运行的程序,那么我们就需要静态链接,这样生成程序才不会因为动态链接库的原因运行失败。

默认情况下,Rust 静态连接所有 Rust 代码。如果程序中使用了标准库,Rust 会连接到系统的libc实现。

环境

苹果系统: 操作系统:macOS 12.3.1 21E258 x86_64 生锈:rustc 1.60.0 (7737e0b5c 2022-04-04) 生锈:rustup 1.24.3 (ce5817a94 2021-05-31)

Linux: 操作系统:EndeavourOS Linux x86_64 核心:5.17.1-arch1-1 生锈:rustc 1.60.0 (7737e0b5c 2022-04-04) 生锈:rustup 1.24.3 (ce5817a94 2021-05-31)

> 首先需要安装Rust,使用命令`` 。

案例

使用 Cargo 新建二进制项目:

cargo new --bin hello 

文件main.rs:

fn main() { println!("Hello World!\n"); } 

macOS 编译为 Linux 和 Windows 可用二进制程序

编译为 Linux 平台

想要实现Linux平台可以运行的程序,那么就需要使用musl来替代glibc,musl实现了Linux libc。

musl 在macOS上使用musl-cross,musl-cross是专门编译到Linux的工具链,下面进行安装:

> musl https://musl.libc.org/

$ brew install FiloSottile/musl-cross/musl-cross 

还需要创建musl-gcc:

$ ln -s /usr/local/bin/x86_64-linux-musl-gcc /usr/local/bin/musl-gcc 

添加对应的Target,只需要执行一次就可以了:

rustup target add x86_64-unknown-linux-musl 

修改配置文件~/.cargo/config(如果没有可以新建),添加以下内容:

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

也可以在项目根目录下创建 .cargo/config 文件,只对当前项目生效

# 使用 cargo build --release --target x86_64-unknown-linux-musl 

结果:

$ tree -L 2 target/x86_64-unknown-linux-musl target/x86_64-unknown-linux-musl ├── CACHEDIR.TAG └── debug ├── build ├── deps ├── examples ├── hello ├── hello.d └── incremental 5 directories, 3 files $ file target/x86_64-unknown-linux-musl/debug/hello target/x86_64-unknown-linux-musl/debug/hello: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), static-pie linked, with debug_info, not stripped 

编译为Windows平台

mingw-w64是用来编译到Windows的工具链,使用如下命令进行安装:

brew install mingw-w64 

添加接下来mingw-64的Target,只需要执行一次就可以了:

$ rustup target add x86_64-pc-windows-gnu 

修改配置文件~/.cargo/config(如果没有可以新建),设置Linker,添加如下内容:

[target.x86_64-pc-windows-gnu] linker = "x86_64-w64-mingw32-gcc" ar = "x86_64-w64-mingw32-gcc-ar" 

# 使用 $ cargo build --release --target x86_64-unknown-linux-musl 

结果:

$ tree -L 2 target/x86_64-pc-windows-gnu target/x86_64-pc-windows-gnu ├── CACHEDIR.TAG └── debug ├── build ├── deps ├── examples ├── hello.d ├── hello.exe └── incremental 5 directories, 3 files $ file target/x86_64-pc-windows-gnu/debug/hello.exe target/x86_64-pc-windows-gnu/debug/hello.exe: PE32+ executable (console) x86-64, for MS Windows 

最后

- https://tomshine.hashnode.dev/rust-macos-linux-windows 

rust合集


原文链接:https://my.oschina.net/JavaPub/blog/11045237
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章