rust程序静态编译的两种方法总结

1. 概述

经过我的探索,总结了两种rust程序静态编译的方法,理论上两种方法都适用于windows、mac os和linux(mac os未验证),实测方法一性能比方法二好,现总结如下,希望能够帮到你.

2.方法一

2.1 添加配置文件

在项目的同级文件夹下新建".cargo/config.toml"文件,根据使用的系统,添加下面的配置

toml 复制代码
#windows
[target.x86_64-pc-windows-msvc]
rustflags = ["-C", "target-feature=+crt-static"]`
toml 复制代码
#linux
[target.x86_64-unknown-linux-gnu]
rustflags = ["-C", "target-feature=+crt-static"]

理论上mac os也可以,将[target.x86_64-unknown-linux-gnu]替换为自己使用的工具链就可以了

2.2 打包运行

2.2.1 winsows

在windows下运行cargo build --release就可以直接打包为静态链接的程序了;

2.2.2 linux

在linux下运行cargo build --release --target=x86_64-unknown-linux-gnu,可能会出现如下提示
/usr/bin/ld: cannot find -lxxx,这是缺少gcc-libc的静态库文件

需要安装的有两个glibc-staticlibstdc++-static;

在这里可以找到这两个静态库: https://oraclelinux.pkgs.org/

这里是oracle linux9 的链接:https://oraclelinux.pkgs.org/9/ol9-codeready-builder-x86_64/glibc-static-2.34-125.0.1.el9_5.8.x86_64.rpm.html, https://oraclelinux.pkgs.org/9/ol9-codeready-builder-x86_64/libstdc++-static-11.5.0-5.0.1.el9_5.x86_64.rpm.html

注意要选择自己对应的系统!!!

页面向下拉,有个install howto 的标题,直接运行里面的命令(如截图里的dnf --enablerepo=ol9_codeready_builder install libstdc++-static)就可以安装了,安装完就可以愉快的打包了;

3.方法二

复制代码
此方法为使用musl库打包为静态链接,参考我的另一篇文章,实测该方法打包的静态文件性能会比gcc稍差一点;

使用musl将rust程序静态编译

4.总结

优先推荐使用方法一,但据网友说方法一某些库无法成功打包,此时可以考虑采用方法二的方式打包,但会有性能损失,需自行考量。

以上

相关推荐
Flynt9 小时前
就编译了一下代码,浏览器密码没了——Rust 生态遭遇史上最狠供应链攻击
安全·rust·开源
NutShell Wang17 小时前
Rust 1.97 实战迁移:v0 符号重整、Cargo 警告治理与位运算新 API
人工智能·后端·性能优化·rust·vibe coding
进哥AI研习社18 小时前
AtomCode 源码编译与二次开发入门:从 Clone 仓库到自定义 Agent 工具的完整指南
rust·二次开发·源码编译·atomcode·agent 工具·tool 扩展·ai 编码智能体
程序员爱钓鱼20 小时前
Rust 泛型 Generics详解:编写可复用且类型安全的代码
后端·面试·rust
SomeB1oody1 天前
【RustyML入门】6.0. 数学工具
开发语言·后端·机器学习·rust·教程
今天AI了吗2 天前
从聊天到委派:AI Agent 如何推进长期任务
数据库·人工智能·python·sql·rust
梦醒沉醉2 天前
std1.97.1——fmt模块总览
rust
SomeB1oody2 天前
【RustyML入门】5.3. 聚类指标
开发语言·后端·机器学习·rust·教程
雾沉川2 天前
Rust IDE 选型:除 VS Code 之外,RustRover 非商业场景可免费使用
ide·vscode·rust
特立独行的猫a2 天前
Rust + Tauri实现一棵「习惯树」:创意应用 从 Grove 的灵感说起
开发语言·后端·rust·tauri·习惯树·创意应用