Rust 使用cross交叉编译及缩小build文件体积记录

2024-10-16|2024-10-16
qsdj
qsdj
type
status
date
slug
summary
tags
category
icon
password

0x1 背景

最近在折腾rust 在Mac Apple M3 上交叉编译一些windows程序总是遇到各种依赖问题。前前后后困扰了我很久,终于找到了好的方案记录下。
主要用到了cross 基于docker 进行交叉编译类似于golang的开源项目xgo

0x2 cross安装及配置

按照官方文档,如果已经配置好了rust环境直接

2.1 配置及用法

官方文档里写到
“您可以将 Cross.toml 文件放置在 Cargo 项目的根目录中,或使用CROSS_CONFIG环境变量来调整 cross 的行为。您还可以在Cargo.toml中使用package.metadata.cross.KEY ,设置的优先级是环境变量覆盖Cross.toml选项,从而覆盖Cargo.toml选项。”
 
默认不配置就可以更多配置参数参照官方文档,直接在项目中和cargo的用法一样,需要提前安装docker 指定target后第一次运行会自动去拉images可能时间会久点。
notion image
编译后的文件在 /target/{you_target}/release

0x3 缩小rust 编译文件体积

通过之前的调研比对,我使用了以下参数
效果对比:
未配置参数
notion image
配置参数后
notion image
rust在使用在unwrap,panic之类的调用里面会自动记录源代码路径,而cargo默认目录在%users%下面,这会导致编译的二进制文件会存在编译者的目录信息。
notion image
设置环境变量
编译后的效果
notion image

0x4 总结

日常我们为了方便每个项目都默认减小编译后的体积。我们可以先在~/.cargo/config.toml 中配置,这样我们就不需要在每个项目的cargo.toml中配置。
notion image
关于除路径泄漏
我们可以直接配置在自己的环境变量文件中我用的是zsh,我直接修改了~/.zshrc
notion image
这样就不需要每次都输入了。如果配置了这个环境变量还不行可以先查看环境变量是否配置成功。
echo $RUSTFLAGS 看到配置成功,然后发现还无法消除那可以在~/.cargo/config.toml 中配置,将这个环境变量传递给编译的docker中。
本文仅供参考,只是我日常工作中遇到的问题做个记录,如果有什么不对的地方可留言。
 
CobaltStrike CDN上线的折腾CobaltStrike CDN上线的折腾
Loading...