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

2024-10-16|2024-12-18
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选项。”
这是我的配置,写在在项目下的Cross.toml
 
更多配置参数参照官方文档,直接在项目中和cargo的用法一样,需要提前安装docker 指定target后第一次运行会自动去拉images可能时间会久点。
notion image
编译后的文件在 /target/{you_target}/release

2.1 进阶配置交叉编译MSVC 和 Apple Darwin

Additional Dockerfiles for other targets can be found in
cross-toolchains. These include MSVC and Apple Darwin targets, which we cannot ship pre-built images of.
其他目标的附加 Dockerfile 可以在以下位置找到 跨工具链。其中包括 MSVC 和 Apple Darwin 目标,我们无法提供其预构建图像。
cross-toolchains这是Cross生成用于为其他目标构建映像的其他 Dockerfile 和 crosstool-ng 配置文件。这些允许使用其他目标以及不同的 glibc 或 GCC 版本。
安装:
notion image
项目下配置Cross.toml

0x3 缩小rust 编译文件体积

通过之前的调研比对,我使用了以下参数
效果对比:
未配置参数
notion image
配置参数后
notion image
rust在使用在unwrap,panic之类的调用里面会自动记录源代码路径,而cargo默认目录在%users%下面,这会导致编译的二进制文件会存在编译者的目录信息。
notion image
设置环境变量
编译后的效果
notion image
msvc的配置,减少编译体积不要PDB调试文件
本文仅供参考,只是我日常工作中遇到的问题做个记录,如果有什么不对的地方可留言。
 
CobaltStrike CDN上线的折腾CobaltStrike CDN上线的折腾
Loading...