使用win10 wsl子系统将 rust 程序静态编译为linux可执行文件
chapter Ⅰ 事情起因
最近在学习rust, 想把一部分java服务迁移至rust编写,但由于公司服务器都是linux系统,所以在找windows下交叉编译为linux可执行文件的方法,把bing首页搜索的结果试了个遍都不行, 始终报错“musl-gcc”无法找到,搜遍全网都无法解决。 最终在我不断尝试的过程中逐渐发现解决办法,遂将整个过程记录下来。
chapter Ⅱ 安装方法(windows安装rust和vs code略过)
1. 启用wsl 2
根据微软的官方文档,使用下面的命令会默认安装wsl2 并下载linux镜像,整个过程可能会重启一到两次
wsl --install
微软官方文档: https://learn.microsoft.com/zh-cn/windows/wsl/install
下载好后打开微软应用商店,输入你想装的linux版本,点击获取



下载好后可以点击启动或者打开,出现以下提示

不用理他,直接点击右上角的关闭,这样我们下次再打开就是使用的root用户,不会创建多余的用户和密码,当然也可以选择根据提示创建用户和密码,使用起来除了一些命令需要加sudo之外没有任何不同。
2. 添加开发环境
2.1. 打开rust官网,复制以下命令,安装rust工具链
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

安装完成后提示说环境变量还没生效,手动source一下或者直接关掉重新启动子系统窗口

完成后运行rustup -V查看一下rust的相关版本信息

2.2. 安装rust的linux静态编译工具,等待安装完成
rustup target add x86_64-unknown-linux-musl
因为我已经安装过所以显示如下图

2.3. 安装"musl-gcc"
打开musl官网,https://musl.libc.org/ ,下载最新版的源代码

将下载的压缩包粘贴到子系统的home路径下(其他路径也可以)

直接复制粘贴,爽歪歪!!!
进入子系统,cd /home,然后执行tar -zxvf musl-1.2.5.tar.gz解压缩,下载的哪个版本就解压哪个版本
依次等待执行cd musl-1.2.5,./configure, make, make install
./configure运行后可能会出现这个提示说没有c编译器

不用慌,运行下面这条命令,安装开发套件,安装完毕后继续执行./configure以及后面的命令
yum groupinstall "Development Tools"
2.4. 将"musl-gcc"加入环境变量
执行 vi /etc/profile, 将export PATH=$PATH:/usr/local/musl/bin/;加入到文件最后,关闭并保存

保存后关闭窗口,然后重新打开一个子系统窗口输入musl-gcc -v,如果正确显示版本信息,则表示已经安装成功

3. linux静态编译
在主系统打开rust项目文件夹,按住shift键,点击鼠标右键,点击在此处打开linux shell

开始编译cargo build --release --target=x86_64-unknown-linux-musl
等待编译完成,上传服务器,运行

enjoy it!
chapter Ⅲ 总结
因为以前没有编译过c++项目,所以对编译相关的知识知之甚少,通过本次的实践尝试,学到了一些编译链接的知识,留下一些微不足道的痕迹,希望对你有帮助。
同时对于rust的编译工具链表示你在干什么,msvc模式下的控制台警告至今无法消除

使用win10 wsl子系统将 rust 程序静态编译为linux可执行文件的更多相关文章
- GraalVM最佳实践,使用Java开发CLI、Desktop(JavaFX)、Web(SpringBoot)项目,并使用native-image技术把Java代码静态编译为独立可执行文件(本机映像)
原创文章,转载请注明出处! 源码地址: Gitee Gtihub 介绍 GraalVM最佳实践,使用Java开发CLI.Desktop(JavaFX).Web(SpringBoot)项目,并使用nat ...
- Rust初步(二):使用Visual Studio Code编写Rust程序(猜猜看游戏)
我是照着下面这篇帮助文档,完成了第一个完整的Rust程序: 猜猜看 游戏 http://kaisery.gitbooks.io/rust-book-chinese/content/content/3. ...
- JIT(动态编译)和AOT(静态编译)编译技术比较
Java 应用程序的性能经常成为开发社区中的讨论热点.因为该语言的设计初衷是使用解释的方式支持应用程序的可移植性目标,早期 Java 运行时所提供的性能级别远低于 C 和 C++ 之类的编译语言.尽管 ...
- Win10 Ubuntu子系统运行32bit Linux原生程序
本文主要描述的是:解决 Win10 Ubuntu子系统中运行 32bit Linux原生程序 报错 Exec format error . 问题来源于 在 Win10 Ubuntu子系统中运行 ...
- win10 Ubuntu子系统安装&odoo10社区版安装
参考文档: http://www.cnblogs.com/odoouse/p/5995603.html https://www.jianshu.com/p/58090215bda8 一.win10 U ...
- Linux/Ubuntu下 静态编译Qt程序
一般情况下,我们用Qt编译出来的程序是要依赖于系统Qt库的,也就是这个程序移到别的没有安装Qt库的系统上是不能使用的.会提示缺少……库文件之类的错误.这就是动态编译的结果. 但是如果我们想编译一个程序 ...
- Linux下静态编译Qt程序
一般情况下,我们用Qt编译出来的程序是要依赖于系统Qt库的,也就是这个程序移到别的没有安装Qt库的系统上是不能使用的.会提示缺少……库文件之类的错误.这就是动态编译的结果. 但是如果我们想编译一个程序 ...
- 亲测VS2010纯静态编译QT4.8.0,实现VS2010编译调试Qt程序,QtCreator静态发布程序(图文并茂,非常详细)
下载源代码,注意一定是源码压缩包如qt-everywhere-opensource-src-4.8.0.zip,不是Qt发布的已编译的不同版本的标准库如qt-win-opensource-4.8.0- ...
- [转载]解决win10 VC++6.0 应用程序无法正常运行 0xc0000142
本文转载自http://blog.csdn.net/w_9449/article/details/52864135 转载请申明哦,其实我发现自从我在贴吧发了帖子后,就冒出了不少帖子.经验.当然方法和我 ...
- 解决win10 VC++6.0 应用程序无法正常运行 0xc0000142
废话不多说,无法正常运行原因就是win10不兼容中文版的vc,解决方法就是一句话,用英文版的msdev.exe替换中文版的msdev.exe,msdev.exe是vc的启动程序.直接上来教你怎么做.废 ...
随机推荐
- 【忍者算法】从生活场景理解链表反转:最重要的基础算法|LeetCode第206题 反转链表
从生活场景理解链表反转:最重要的基础算法 为什么这道题如此重要 反转链表看似简单,却是链表操作的基石.就像建房子要先打好地基,做复杂的链表操作前必须深刻理解反转原理.无数高频面试题都建立在这个基础之上 ...
- 【整活向】把tidb的文档塞给了基于oceanbase的RAG机器人
最近官方推出了免费试用365天的云数据库,版本也升级到了4.3.支持了向量功能. 官方推出了活动体验AI的动手实战活动, 教程中使用了docker单机版数据库,既然有免费的云数据库,就优先使用云数据库 ...
- 聊聊DeepSeek的MLA和GRPO
关注公众号回复1 获取一线.总监.高管<管理秘籍> 结合近期对DeepSeek的探索,对之前文章的内容做一些更新,主要是两个方面:训练过程的优化策略GRPO,以及架构侧的一个创新MLA. ...
- MT Photos——一个比群晖Moments更好用的AI相册管理神器
MT Photos是一款为NAS用户量身打造的照片管理系统. 通过AI技术,自动将您的照片整理.分类,包括但不限于时间.地点.人物.照片类型. 您可以在任何支持Docker的系统中运行它. 如果您的操 ...
- 关于valueOf的一点思考
官方描述:返回值为该对象的原始值. 来源:Object.prototype,所以所有js对象都继承了此方法,根据犀牛书第六版的描述,对象转换为数字和字符串的时候的过程是不一样的. 对象 -> 字 ...
- centos7 挂载未分配的硬盘空间 (测试可用)
=============================================== 2019/7/28_第1次修改 ccb_warlock == ...
- BandiZip无广告版安装
BandiZip无广告版安装 Bandizip 是一款压缩软件,它支持Zip.7-Zip 和 RAR 以及其它压缩格式.它拥有非常快速的压缩和解压缩的算法,从大学用到现在,但是现在最新的版本在每次压缩 ...
- 一文速通Python并行计算:03 Python多线程编程-多线程同步(上)—基于互斥锁、递归锁和信号量
一文速通 Python 并行计算:03 Python 多线程编程-多线程同步(上)-基于互斥锁.递归锁和信号量 摘要: 在 Python 多线程编程中,线程同步是确保多个线程安全访问共享资源的关键技术 ...
- kubernetes mysql-StatefulSet报错处理
我们使用网上mysql-StatefulSet集群教程时候mysql-1启动错误,init-error. 第一次尝试解决:我从官网上下载yaml部署依然报错. 第二次尝试解决:网上换各种版本的yaml ...
- 3D Gaussian 三维视觉重建
论文资料 论文 https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/3d_gaussian_splatting_low.pdf 资料网站 ...