当前位置: 首页 > news >正文

rust交叉编译

文章目录

  • 交叉编译是什么
  • 交叉编译环境配置
    • musl工具链(编译Linux环境程序所需)
    • windows-gnu相关(编译Windows环境程序所需)
  • Example
    • Rust程序示例
    • 配置和打包编译
    • 编译(Linux环境程序)
    • 编译(Windows环境程序)
    • 编译powerpc环境程序

交叉编译是什么

一般编程阶段用的是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环境里运行。

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

安装一下

rustup target add x86_64-unknown-linux-musl

安装musl-cross

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环境程序)

cargo build --release --target x86_64-unknown-linux-musl

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

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环境程序)

cargo build --release --target x86_64-pc-windows-gnu

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

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环境程序

cargo build --release --target powerpc64-unknown-linux-gnu

相关文章:

  • 【linux】linux中如何通过systemctl来创建和管理服务
  • 电销机器人引领电销变革
  • servlet的执行顺序
  • 初探 Rust 语言与环境搭建
  • 多功能声学馆的卓越优势:剧院级音效的全新体验—轻空间
  • 【游戏引擎之路】登神长阶(九)——《3D游戏编程大师技巧》:我想成为游戏之神!
  • 【Python学习-UI界面】PyQt5 小部件1-Label
  • WPF-实现多语言的静态(需重启)与动态切换(不用重启)
  • 前端 JavaScript 的 _ 语法是个什么鬼?
  • 自建Gitlab和Gitlab runner并推送镜像到Harbor
  • 学习STM32(6)-- STM32单片机ADCDAC的应用
  • Halcon图像平滑与去噪
  • 关系,条件和逻辑操作符详解
  • Kafka系列之:Dead Letter Queue死信队列DLQ
  • 去中心化技术的崛起:探索Web3的新时代
  • vue去除数组最后一个元素
  • 【书生大模型实战营(暑假场)】入门任务二 Git 关卡
  • zabbix7.0 设置中文语言( Debian GNU/Linux 12)
  • 费用流,EK算法,Primal Dual 算法详解,OJ练习
  • Spring Boot 集成 Apache Shiro 实现权限管理
  • 城事 | 重庆新增热门打卡地标,首座熊猫主题轨交站亮相
  • 历史地理学者成一农重回母校北京大学,担任历史系教授
  • 被流量绑架人生,《人生开门红》能戳破网络时代的幻象吗
  • 外交部就习近平主席将出席中拉论坛第四届部长级会议开幕式介绍情况
  • 让胖东来“自闭”的玉石生意,究竟水有多深?
  • 上海下周最高气温在30℃附近徘徊,夏天越来越近