使用win10 wsl子系统将 rust 程序静态编译为linux可执行文件

news/2024/12/16 23:04:06/文章来源:https://www.cnblogs.com/jiajie6591/p/18611250

chapter Ⅰ 事情起因

最近在学习rust, 想把一部分java服务迁移至rust编写,但由于公司服务器都是linux系统,所以在找windows下交叉编译为linux可执行文件的方法,把bing首页搜索的结果试了个遍都不行, 始终报错“musl-gcc”无法找到,搜遍全网都无法解决。 最终在我不断尝试的过程中逐渐发现解决办法,遂将整个过程记录下来。

chapter Ⅱ 安装方法(windows安装rust和vs code略过)

1. 启用wsl 2

根据微软的官方文档,使用下面的命令会默认安装wsl2 并下载ubuntu镜像,整个过程可能会重启一到两次
wsl --install
微软官方文档: https://learn.microsoft.com/zh-cn/windows/wsl/install
下载好后打开微软应用商店,输入你想装的linux版本,点击获取
image
imageimage

下载好后可以点击启动或者打开,出现以下提示
image
不用理他,直接点击右上角的关闭,这样我们下次再打开就是使用的root用户,不会创建多余的用户和密码,当然也可以选择根据提示创建用户和密码,使用起来除了一些命令需要加sudo之外没有任何不同。

2. 添加开发环境

2.1. 打开rust官网,复制以下命令,安装rust工具链

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
image
安装完成后提示说环境变量还没生效,手动source一下或者直接关掉重新启动子系统窗口
image
完成后运行rustup -V查看一下rust的相关版本信息
image

2.2. 安装rust的linux静态编译工具,等待安装完成

rustup target add x86_64-unknown-linux-musl
因为我已经安装过所以显示如下图
image

2.3. 安装"musl-gcc"

打开musl官网,https://musl.libc.org/ ,下载最新版的源代码
image
将下载的安装包粘贴到子系统的home路径下(其他路径也可以)
image
直接复制粘贴,爽歪歪!!!
进入子系统,cd /home,然后执行tar -zxvf musl-1.2.5.tar.gz解压缩,下载的哪个版本就解压哪个版本
依次等待执行cd musl-1.2.5./configure, make, make install
./configure运行后可能会出现这个提示说没有c编译器
image
不用慌,运行下面这条命令,安装开发套件,安装完毕后继续执行./configure以及后面的命令
yum groupinstall "Development Tools"

2.4. 将"musl-gcc"加入环境变量

执行 vi /etc/profile, 将export PATH=$PATH:/usr/local/musl/bin/;加入到文件最后,关闭并保存
image
保存后关闭窗口,然后重新打开一个子系统窗口输入musl-gcc -v,如果正确显示版本信息,则表示已经安装成功
image

3. linux静态编译

在主系统打开rust项目文件夹,按住shift键,点击鼠标右键,点击在此处打开linux shell
image
开始编译cargo build --release --target=x86_64-unknown-linux-musl
等待编译完成,上传服务器,运行
image
enjoy it!

chapter Ⅲ 总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/854029.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Cloud 负载均衡配置 (@LoadBalanced)

一、负载均衡 目前是两种 Ribbon 和 spring-cloud-loadbalancer - Ribbon已经闭源 配置策略较多 :轮询,随机,权重,自定义 四种负载均衡方案 配置方式yml 注解- spring-cloud-loadbalancer属于springcloud,项目兼容性更好 配置策略: 更注重 自定义(默认为轮询) 配置方式注…

架构信息收集

引子:一个Web应用的构成,由诸多组件&服务相结合,而域名仅是处于Web架构中最表层的一部分。本篇则由表及里,依次对整个Web应用架构,所需收集的信息类型、收集方式等进行介绍。附:完整笔记目录~ ps:本人小白,笔记均在个人理解基础上整理,若有错误欢迎指正! 2.2 架构…

x86指令集 字节大小

x86指令集 字节大小 https://bbs.kanxue.com/thread-190127.htm 最近对x86_32架构下的许多程序进行了指令长度统计,结果表明所有程序所涉及的指令长度范围均为:1~11字节。而根据INTEL 开发者手册上介绍的指令的最大长度限制为15字节。但是,在什么情况或者架构上才会有12~15字…

实际项目中不一样的《桥接模式》

图片缩略图功能 需要对图片生产缩略图,压缩并保存到不同的介质中。输入端可能是本地图片,也可能是网络图片。保存的位置可能是本地,也有可能是第三方的minio、阿里云oss、七牛云oss。并且这些途径可能随时扩展。为了设计的灵活性,这里就要把输入可输出抽象出来,应用层通过…

一款渗透测试信息收集集成工具--mitan密探

本工具仅供安全测试人员运用于授权测试, 禁止用于未授权测试, 违者责任自负。作者及本公众号相关负责人不对您使用该工具所产生的任何后果负任何法律责任,在扫描模块使用多线程,在测试过程中根据目标的实际情况进行调整,切勿进行大线程低延时的大规模快速扫描,以免对目标服务…

最大网络流基本概念

1. 基本概念 1.1 流网络,不考虑反向边如果存在反向边也没事,不如有u->v和v->u两条边,那么就可以新加入一个点 p,u->v,v->p,p->u,转化为这三条边 1.2 可行流,不考虑反向边 1.2.1 两个条件:容量限制、流量守恒 容量限制:每条边流的不能超过这条边的权值 流量守…

sqli-labs

sqli-labs Less-1 基于错误的GET单引号字符型注入 index.php分析error_reporting(0); 不反馈错误 isset($_GET[id]) 检查($ _GET[id])参数是否设置 LIMIT 0,1 从第一条开始记录,只取一条记录1.推测闭合方式?id=1\输入\ ,后面是 ,推测是单引号闭合 输入 ?id=1 报错 输入 ?…

一文读懂:AI创业和投融资领域常见专有名词缩写详解

=== 预计悦读时间:3分钟 | 📚字数:约1000字——知识满满,不虚此行!🤔为什么你需要这篇神器? 就像由算法推荐给各位好奇的同学一样,我也被这些术语所困扰,想象一下,你正沉浸在一场关于AI的精彩演讲或者播客中,突然,一个神秘的英文缩写从嘉宾口中飞出,像是外星语言般让你瞬…

Simplex Method (单纯形方法)

学习目标:在本节中,我们将学习使用\(\textbf{单纯形法}\)解决线性规划最大化问题:(In this section, we will learn to solve linear programming maximization problems using the Simplex Method:)识别并建立标准的最大化形式的线性规划 (Identify and set up a linear pr…

《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解

《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解@目录二、高级篇(大厂进阶)4.Docker网络4.1Docker网络是什么4.2常用基本命令4.3能干嘛4.4网络模式4.4.1总体介绍4.4.2容器实例内默认网络IP生产规则4.4.3案例说明…

实验6 C++

任务四:Vector.hpp #pragma once #include <iostream> #include <stdexcept>using namespace std;template <typename T> class Vector { public:Vector(int n, int p = 0);Vector(const Vector<T> &v);~Vector();int get_size() const;T& a…

Docker安装Redis和Elasticsearch

本章将和大家分享在Docker中如何安装Redis和Elasticsearch。本章将和大家分享在Docker中如何安装Redis和Elasticsearch。废话不多说,下面我们直接进入主题。 一、Docker安装Redis 1、拉取最新版的 redis 镜像docker pull redis2、查看本地镜像docker images3、从官网获取 redi…