这两天一直在搞rust的交叉编译,大概花了1天半时间才搞明白。官方的文档说的很简单,始终不起作用,直到看了下面的文章才醍醐灌顶。从原理到详细步骤都有了。原文链接RISC-V Bytes: Rust Cross-Compilation · Daniel Mangum感谢Daniel我自己也总结了一下,如果有朋友需要的话可以参考简洁版在工程目录下建立文件夹和配置文件mkdir .cargo && cd .cargo && touch config.toml然后运
Rust相比Go的优势:
Rust可以做内联汇编,Go不行(Rust的SIMD库也在开发中,这种事情你不会用Go做)。
Rust有确定性析构,Go没有,只能whole-world-stop做GC。
Rust的接口(trait)可以静态派发,做zero-costabstraction,Go不行,它的interface只能靠反射做动态派发。
Rust没有运行时,可以写操作系统(我估计至少需要几百行汇编做bootstrap),Go离这种能力很远。
Rust有一个更丰富的类型系统,表达能力更强,允许你做更高层次的抽
0x00 开篇
什么是交叉编译?可能有的同学不理解。我这里简单介绍下,所谓交叉编译,就是在一个平台上可以编译生成另一个平台的可执行文件。这节课主要介绍如何在Windows系统上编译生成Linux系统的可执行文件。
0x01 准备工作
我们跨平台编译,要准备如下一些前期工作。
Windows 11
VS2012(VS2019我也测试过)
CLion
Rust 1.56.1
CentOS 7
添加Target
这里我所用的Linux是64位的,所以我这里需要添加x86_64-unknown-lin
【GUI程序最好还是在各个平台编译,跨平台编译一大堆问题(我这边是报错了),源码跨平台也很不错了(而且如果是Windows,最好是在win7编译,这样能支持win8和10,而在win10编译的在win7和8可能运行不了),可以装虚拟机专门用于多平台编译】
通过命令查看支持哪些OS和CPU架构
rustc --print target-list | pr -tw100 --columns 3
toolchain和target分别是,toolchain是交叉编译所需的“编译工具”,而target则是.
Rust 交叉编译指的是在一台计算机上编译出可以在另一种体系结构的计算机上运行的可执行文件。例如,在 x86 架构的计算机上编译出 ARM 架构的可执行文件。
要进行 Rust 交叉编译,需要安装目标架构的交叉编译工具链。可以通过 Rust 官方提供的 `rustup` 工具来安装交叉编译工具链。例如,要在 x86 架构的计算机上编译出 ARM 架构的可执行文件,可以执行以下命令:
rustup target add armv7-unknown-linux-gnueabihf
接下来,可以使用 Cargo 的 `--target` 参数来指定目标架构。例如,要编译出 ARM 架构的可执行文件,可以执行以下命令:
cargo build --target=armv7-unknown-linux-gnueabihf
这样,就可以在 x86 架构的计算机上编译出 ARM 架构的可执行文件了。