Rust 交叉编译 macOS 为 Linux 和 Windows
[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

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
OSPO 成熟度模型(中文版)
由 TODO Group 出品 原文链接: https://github.com/todogroup/ospology/tree/main/ospo-model/en 本文由 vivo 互联网 OSPO 成员整理翻译, 目前已提交贡献至上游。 vivo 作为 TODO Group会员,推动了 TODO Group官网中文版的发布,并基于全球同行共识,翻译发布了 OSPO 定义2.0、OSPO 思维导图。 OSPO(Open Source Program Office):开源项目办公室,被视为开源治理的最佳实践。 组织 OSPO 模型分类标准 我们希望这是一份动态文件,旨在建立 OSPO 模型的分类标准并确定有助于不同组织学习和实施的关键组件(模式)。 社区可以对五阶段 OSPO 成熟度模型进行颠覆式贡献,以更好地满足特定垂直行业和/或地区的需求。 OSPO 模型 1 —— 五阶段 OSPO 成熟度模型 完整研究可以查阅 OSPO 的演进 欲了解更多 OSPO 特点、组织架构和角色相关信息,请查看深入了解 OSPO(中文版) 随着 OSPO 的激增和普及,这些专项也日趋成熟。通过把 OS...
- 下一篇
预算有限,资源冗余?DWS集群缩容如何帮你解决烦劳
本文分享自华为云社区《GaussDB(DWS)华为云数仓使用实践–预算有限,资源冗余?华为云数仓集群缩容帮你解决烦劳》,作者: OneToOne。 一、为什么要做缩容? 在使用GaussDB(DWS)数仓时,在业务不同的时段,对数仓的计算资源大小有不同的需求。在业务繁忙、流量高峰的时候需要对DWS集群节点扩容,增强业务负载能力,业务峰值过去,则需要减少数据库节点,释放计算资源,降低成本压力。 缩容提供了当用户需要的计算或者存储资源冗余超出业务需求时,尽可能不影响用户业务情况下缩减集群数据仓库节点的能力。 二、缩容使用条件和约束? 集群状态为Normal,不能是只读,且无其他正在运行的任务信息。 缩容集群仅8.1.1.300及以上版本支持,包周期计费模式的集群仅8.2.1及以上版本支持。 集群按照环的方式配置,比如4个或5个主机组成一个环,这些主机上的DN主节点、备节点和从节点都部署在这些节点里,那么这些节点组成一个集群环 ,缩容的最小单元是一个集群环,集群至少有2个环才能支持缩容,缩容按照集群环从后往前缩容节点。 缩容节点不能包含GTM组件,CM Server组件,CN组件。 集群租户...
相关文章
文章评论
共有0条评论来说两句吧...