rust交叉编译

文章目录

交叉编译是什么

一般编程阶段用的是Windows或者Mac系统,部署平台是Linux,这种情况下就需要使用Cross-Compiler交叉编译,意思是可以在当前平台Host下编译出目标平台target的可执行文件,

尤其是做ARM平台开发的同学对这个更为熟悉。

Rust交叉编译在Github上有一个文档Rust核心员工Jorge Aparicio提供的一份文档https://github.com/japaric/rust-cross,推荐大家仔细的读一读。

如果要求比较简单,都是X86_64架构,从Mac上编译出unknow-linux/pc-windows-gnu就好。

交叉编译环境配置

musl工具链(编译Linux环境程序所需)

musl实现了Linux libc,质量可靠,适配所有Linux环境,使用静态连接替换动态链接,这样就能打出一个完整的二进制文件,可以丢到任何Linux环境里运行。

当然,关于静态链接与动态链接各有优缺点,这里不细说。

安装一下

bash 复制代码
rustup target add x86_64-unknown-linux-musl

安装musl-cross

bash 复制代码
brew install filosottile/musl-cross/musl-cross

windows-gnu相关(编译Windows环境程序所需)

安装windows-gnu,用msvc容易编译失败,msvc其实就是指编译出来的程序直接依赖Windows平台的基础库,而gnu的则是开源的基础库直接内嵌到咱们编译的程序里,所以msvc的程序要更小。

复制代码
rustup target add x86_64-pc-windows-gnu

安装mingw-w64

复制代码
brew install mingw-w64

Example

Rust程序示例

复制代码
fn main() {
  println!("Hello, world!\r\nwww.qttc.net\r\n");
}

配置和打包编译

配置config

vi ~/.cargo/config(没有新建即可,另外可在项目根目录下创建.cargo/config文件,只对当前项目生效)

内容如下:

配置powerpc 的链接器

复制代码
[target.powerpc64-unknown-linux-gnu]
linker = "powerpc64-linux-gnu-gcc"

配置x86 的链接器

复制代码
[target.x86_64-unknown-linux-musl]
linker = "x86_64-linux-musl-gcc"

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

编译(Linux环境程序)

bash 复制代码
cargo build --release --target x86_64-unknown-linux-musl

可把编译命令写到脚本中:

编译命令整理为sh可执行文件脚本(package_linux.sh,放在项目根目录,给与执行权限chmod +x package_linux.sh)如下:

bash 复制代码
if [[ $(echo $0 | awk '/^\//') == $0 ]]; then
    ABSPATH=$(dirname $0)
else
    ABSPATH=$PWD/$(dirname $0)
fi
cd ${ABSPATH}
cargo build --release --target x86_64-unknown-linux-musl

编译出来后在target里会有个x86_64-unknown-linux-musl目录,里面又根据--release有debug和release目录,其中名为项目名的文件就是打包出来的Linux环境程序软件。

编译(Windows环境程序)

bash 复制代码
cargo build --release --target x86_64-pc-windows-gnu

也可把编译命令写到脚本中:

编译命令整理为sh可执行文件脚本(package_win.sh,放在项目根目录,给与执行权限chmod +x package_win.sh)如下:

bash 复制代码
if [[ $(echo $0 | awk '/^\//') == $0 ]]; then
    ABSPATH=$(dirname $0)
else
    ABSPATH=$PWD/$(dirname $0)
fi
cd ${ABSPATH}
cargo build --release --target x86_64-pc-windows-gnu

编译出来后在target里会有个x86_64-pc-windows-gnu目录,里面又根据--release有debug和release目录,其中xxx.exe为打包出来的Windows环境程序软件。

编译powerpc环境程序

bash 复制代码
cargo build --release --target powerpc64-unknown-linux-gnu
相关推荐
Conan在掘金5 分钟前
鸿蒙报错速查:Function lacks ending return statement,返回路径漏 return 就炸,根因 + 真解法
后端
雪碧透心凉_25 分钟前
while 循环与循环嵌套
开发语言·python
人间凡尔赛31 分钟前
AI-Native 云原生架构:2026 年从容器编排到智能体编排的范式革命
后端·云原生·架构
乐观勇敢坚强的老彭32 分钟前
信奥C++一维数组笔记
开发语言·c++·笔记
这就是佬们吗40 分钟前
Python入门⑤-异常处理、文件操作与实战项目
开发语言·数据库·python·算法·pycharm
IT_陈寒1 小时前
Vue的响应式让我加班到凌晨3点,原来问题出在这
前端·人工智能·后端
卷无止境1 小时前
提升 Python 代码健壮性的方法大盘点
后端·python
snow@li1 小时前
Spring Boot:项目服务器完整部署教程(零基础可直接实操)
服务器·spring boot·后端
asdzx671 小时前
Python PDF 拆分实战指南:单页拆分与按需页码范围拆分
开发语言·python·pdf