【RUST 实战】交叉编译之Windows To Linux

简介: 【RUST 实战】交叉编译之Windows To Linux

0x00 开篇


什么是交叉编译?可能有的同学不理解。我这里简单介绍下,所谓交叉编译,就是在一个平台上可以编译生成另一个平台的可执行文件。这节课主要介绍如何在Windows系统上编译生成Linux系统的可执行文件。 


0x01 准备工作


我们跨平台编译,要准备如下一些前期工作。


操作环境


  • Windows 11
  • VS2012(VS2019我也测试过)
  • CLion
  • Rust 1.56.1
  • CentOS 7

添加Target


这里我所用的Linux是64位的,所以我这里需要添加x86_64-unknown-linux-musl 的这个target

rustup target add x86_64-unknown-linux-musl

通过下面的命令可以查看所有支持的target和已经安装的target。如果已安装会在后面显示(installed)

rustup target list


新建项目


新建一个普通项目cross_compile_test。这里我们以默认输出hello world的程序为例。


0a2653c851af460fa595bd959398a8f1.png


添加配置文件


配置文件可以针对某个项目,当然也可以在全局配置。下面以针对单个项目为例。

在项目目录下添加.cargo文件夹,在.cargo文件夹下添加config.toml文件。并且在config.toml中输入以下内容。

[target.x86_64-unknown-linux-musl]
linker = "rust-lld"
rustflags = ["-C", "linker-flavor=ld.lld"]

PS:关于全局配置,可以把上面的配置内容,复制到"C:/Users/当前用户名/.cargo/config"文件中,如果没有可以自行创建。config文件可以带toml扩展名,也可以不带。

最终结果如下图所示:


2d65d23f6d4748949b924e4057485923.png

 

0x02 项目编译


终端执行下面的命令,编译为Linux可执行二进制文件。如果不加--release则默认以debug模式编译。

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


6de278e6d6694ce5bb08e7e842b7e74b.png


编译完成后,会自动生成target文件夹,在target/x86_64-unknown-linux-musl/release文件夹下的cross_compile_test就是最终的Linux可执行二进制文件。 


0x03 文件测试


我们将文件拷贝到CentOS中测试。可以完美执行~~~


 8ec4f2997fb246878c34ecd6d122b7c6.png


0x04 扩展——Windows静态编译


不知道你是否测试过下面的这个场景。在Windows上,如果把每次使用cargo build命令编译后生成.exe可执行文件复制到其它电脑上运行,是无法运行的。这里呢,我们需要使用静态编译。否则,在其它Windows电脑上将会报错。


静态编译的方法也很简单,只需在配置文件中加入下面的代码。

[target.x86_64-pc-windows-msvc]
rustflags = ["-C", "target-feature=+crt-static"]

然后再使用下面的命令编译即可。

cargo build --release --target=x86_64-pc-windows-msvc

具体过程同上面的Linux二进制文件编译过程。这里就不再详细叙述了。


相关文章
|
9月前
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
2305 77
|
7月前
|
安全 API 数据安全/隐私保护
aipy实战:建设PE文件查杀神器,阻止Windows EXE木马!
本工具为小型木马静态特征查杀工具,专用于检测Windows下的EXE文件是否为可疑木马。核心功能包括:扫描恶意字符串(如keylogger、powershell)、检查熵值异常以判断加密/加壳、揪出可疑API组合(如注册表篡改、网络通信链)以及解析PE头分析编译环境与加壳痕迹。通过提示词实现功能开发,并保存为`aipy_kill_rat.py`文件。测试结果显示,工具成功扫描出426个可疑字符串、超高熵值及恶意API组合,确认目标文件为恶意木马。该工具轻量灵活,适合样本初筛与应急响应,是静态分析的高效利器。
|
Java 开发工具
鸿蒙Flutter实战:02-Windows环境搭建踩坑指南
本指南介绍如何搭建鸿蒙Flutter开发环境,包括下载Flutter SDK、配置环境变量(如FLUTTER_STORAGE_BASE_URL、PUB_HOSTED_URL、DEVECO_SDK_HOME等)和检查工具版本。还提到避免项目路径过深、与SDK同盘存放等注意事项,以及解决VsCode无法识别设备的方法。
535 0
|
9月前
|
关系型数据库 MySQL 应用服务中间件
Linux 手动安装快速部署 LNMP 环境实战
本文详细记录了在阿里云ECS上手动搭建LNMP环境的过程,系统选用Ubuntu 24.04。主要内容包括:1) 使用`apt`安装Nginx和MySQL,并更新软件源;2) 编译安装PHP 8.4.5,配置PHP-FPM及环境路径;3) 配置MySQL root用户密码;4) 调整Nginx支持PHP解析并测试整体环境。通过此过程,重现手动配置服务器的细节,帮助熟悉各组件的安装与协同工作。
653 23
|
Rust 安全 编译器
编程语言新宠:Rust语言的特性、优势与实战入门
【10月更文挑战第26天】Rust语言诞生于2006年,由Mozilla公司的Graydon Hoare发起。作为一门系统编程语言,Rust专注于安全和高性能。通过所有权系统和生命周期管理,Rust在编译期就能消除内存泄漏等问题,适用于操作系统、嵌入式系统等高可靠性场景。
970 2
|
Rust 安全 Java
编程语言新宠:Rust语言的特性、优势与实战入门
【10月更文挑战第27天】Rust语言以其独特的特性和优势在编程领域迅速崛起。本文介绍Rust的核心特性,如所有权系统和强大的并发处理能力,以及其性能和安全性优势。通过实战示例,如“Hello, World!”和线程编程,帮助读者快速入门Rust。
1226 1
|
人工智能 监控 安全
掌握Windows管理利器:WMI命令实战
本文介绍了Windows Management Instrumentation (WMI) 的基本概念和用途,通过多个实用的`wmic`命令示例,如获取CPU信息、查看操作系统详情、管理服务、检查磁盘空间等,展示了WMI在系统维护中的强大功能。适合IT专业人士学习和参考。
807 4
|
Rust 编译器 开发者
Rust宏之derive的设计及实战
【10月更文挑战第18天】在 Rust 中,`derive` 宏是一种自动生成代码的工具,可为结构体和枚举类型自动实现特定 trait,减少重复代码。它通过语法糖简化代码,支持 Debug、Clone、PartialEq 等 trait 的自动实现,并允许开发者自定义 `derive` 宏以扩展功能。
338 1
|
JSON Rust 安全
30天拿下Rust之实战Web Server
30天拿下Rust之实战Web Server
255 7