Rust Wasm Linux开发环境搭建

news2025/2/28 21:42:19

一、Linux 镜像版本

CentOS-7-x86_64-DVD-2009.iso,Virtual Box 7.0

选择 GNOME Desktop 版本,

配置远程连接(可选),

nmtui

激活连接 enp0s3 ,查看 ip 地址,

绑定端口转发, 

通过 ssh 连接,

ftp 连接,

# 也可以手动修改配置文件
# cd /etc/sysconfig/network-scripts/
# vim vi ifcfg-xxx

# ONBOOT=yes 则会自动开启网络

二、安装Rust

# 官网 https://www.rust-lang.org/
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

 输入 1 默认安装就好。

修改 Rust 镜像源,

# $CARGO_HOME/.cargo/ 下创建 config.toml
$ touch config.toml
 
# 添加以下内容
 
[source.crates-io]
replace-with = 'ustc'
 
[source.ustc]
registry = "git://mirrors.ustc.edu.cn/crates.io-index"

三、更换软件源

# 更换阿里源 https://developer.aliyun.com/mirror/centos?spm=a2c6h.13651102.0.0.3e221b11e44Xyj
# 备份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# 拉取源文件
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# 生成缓存
yum makecache 

四、安装 WASMER

# 官网 https://wasmer.io/
# windows
iwr https://win.wasmer.io -useb | iex
# linux
curl https://get.wasmer.io -sSfL | sh -s "v3.3.0"
# 使用 cargo 安装
# cargo install wasmer-cli

遇到问题:version ·CLIBC_2.29· not found

解决方案:升级glibc

wget http://ftp.gnu.org/gnu/glibc/glibc-2.31.tar.gz

tar -xf glibc-2.31.tar.gz

cd glibc-2.31

mkdir build

cd build

../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin

make -j 8 --jobserver-style=pipe

make install

strings /lib64/libc.so.6 | grep GLIBC

make localedata/install-locales

ldd --version

又遇到编译器版本过低问题,

只能先按照提示,把软件都安装升级一下;

在安装了 python3 、升级了 gmake 、gcc 之后,再执行安装,无报错,

# 参考以下连接
# GCC 升级 https://blog.csdn.net/carefree2005/article/details/117559312
# MAKE 升级 https://blog.csdn.net/fengqiangname/article/details/121655919
# GLIBCXX问题解决 https://blog.csdn.net/qq_22948593/article/details/110877000
# 缺少libstdc++.so.6 库 https://blog.csdn.net/qianjiu520/article/details/129417730
# Cannot open jobserver 解决 https://github.com/crosstool-ng/crosstool-ng/issues/1858

最终安装成功,

有时候GitHub连不上,多试几次就好了,wapm 可以不用安装, 

# 下载地址 https://github.com/wasmerio/wasmer/releases/download/v3.3.0/wasmer-linux-amd64.tar.gz

首次安装后,需要重开一个终端打开才生效,

wasmer

五、安装 Visual Studio Code

# 官网 https://code.visualstudio.com/

sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo'

yum check-update

sudo yum install code

六、安装 wasm 编译环境

# 新增 nightly 编译模式
rustup default nightly

# 新增编译目标
rustup target add wasm32-unknown-unknown
rustup target add wasm32-wasi

# 安装 wasm 绑定
cargo install wasm-pack
# cargo install https

七、安装 Node.js

# 下载
wget https://nodejs.org/dist/v18.16.0/node-v18.16.0-linux-x64.tar.gz

# 解压
tar -zxvf node-v18.16.0-linux-x64.tar.gz

# 新建安装目录
sudo mkdir /usr/local/nodejs

# 移动到 /usr/local/nodejs
sudo mv node-v18.16.0-linux-x64/* /usr/local/nodejs

# 建立软链接
sudo ln -s /usr/local/nodejs/bin/node /usr/local/bin/node
sudo ln -s /usr/local/nodejs/bin/npm /usr/local/bin/npm

# 测试
node -v
npm -v

# 安装 cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org
sudo ln -s /usr/local/nodejs/bin/cnpm /usr/local/bin/cnpm

# 更换下载源
npm config set registry http://registry.npm.taobao.org

八、安装脚手架 cargo-generate

# 必须安装 openssl-devel
sudo yum install -y openssl-devel

# cargo-generate 用于快速生成 WASM 项目的脚手架(类似 create-react-app)
cargo install cargo-generate

九、创建一个 WASM 项目 

# 使用模板生成
cargo generate --git https://github.com/rustwasm/wasm-pack-template

# 打包
wasm-pack build --target web

可以看到在 pkg 下生成了 wasm 文件和胶水 js 代码。

十、创建一个 Vue 项目

# 使用 Vite
cnpm create vite@latest

将 pkg 文件夹复制到前端项目根路径下,

[sam@localhost wasm-web-demo]$ cp -r ../wasm-demo/pkg/* pkg

 页面引用 wasm 文件,

<script setup lang="ts">
import { onMounted, ref } from 'vue'

import init, { greet } from '../../pkg/mydemo.js'

defineProps<{ msg: string }>()

const count = ref(0)

onMounted(async () => {
  await init()
  greet()
})
# 开放端口
sudo iptables -I INPUT -p tcp --dport 5500 -j ACCEPT
sudo iptables -I INPUT -p tcp --dport 5173 -j ACCEPT

iptables -L -n

十一、编译运行

npm run build
npm run dev

宿主主机访问,chrome,正常

Firefox,报错,低版本火狐浏览器不兼容正则表达式,

把  gs 改成 g 即可,

解决方案参考 https://blog.csdn.net/qq_33183172/article/details/127770780

或者选择升级火狐浏览器,

# 下载
waget https://download-ssl.firefox.com.cn/releases/firefox/113.0/zh-CN/Firefox-latest-x86_64.tar.bz2
# 解压
tar -xjvf Firefox-latest-x86_64.tar.bz2
# 删除系统默认旧版本的 Firefox
sudo rm -rf  /usr/lib64/firefox
# 将解压后的新版本 Firefox 移动到 /usr/lib64
sudo mv firefox /usr/lib64
# 创建一个新的软链接
cd /usr/bin
sudo rm firefox
sudo ln -s  /usr/lib64/firefox/firefox   /usr/bin/firefox

十二、Rust + WASI【运行在浏览器之外】

# 必须先添加 wasm32-wasi
rustup target add wasm32-wasi
# 使用 wasm 运行时 wasmer 
iwr https://win.wasmer.io -useb | iex
# 创建项目
cargo new wasi-demo
# 编译
cargo build --release --target wasm32-wasi 
# 运行
wamser run 

十三、通过 Wasmer 访问 OS 资源 

use std::fs;
use std::io::prelude::*;

fn main() {
    let mut file = fs::File::create("/path/test.txt").unwrap();
    let mut array = String::new();
    array.push_str("你好,世界!");
    write!(file, "{}", array).unwrap();
}

运行时,因为wamser相当于一个容器,容器内的路径要绑定映射到宿主主机的路径,才能访问到宿主主机的资源,

wasmer run -h

# 编译
cargo build --release --target wasm32-wasi
# 运行
wasmer run --mapdir /path:. target/wasm32-wasi/release/wasi-demo.wasm

十四、编译成二进制可执行文件 

wasmer create-exe -o testexe target/wasm32-wasi/release/wasi-demo.wasm

# wasmer 下载地址 https://github.com/wasmerio/wasmer/releases/download/v3.3.0/wasmer-linux-amd64.tar.gz

# 遇到一个错误 error: cannot get prefix for atom wasi-demo
# 在 issue 上找到解决方案 https://github.com/wasmerio/wasmer/issues/3834
# 解决方案:需要将命名中的 - 改成 _
mv target/wasm32-wasi/release/wasi-demo.wasm target/wasm32-wasi/release/wasi_demo.wasm

# 如果遇到 fatal error: wasmer.h: No such file or directory ,则需要导入环境变量
# export WASMER_DIR=/home/user/.local/share/wasmer/

# 如果还是报 fatal error: wasmer.h: No such file or directory ,就把安装目录下的 include 文件夹所有文件复制到 /usr/include

可以看到,编译为可执行文件成功,

 

执行 testexe 成功! 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

gateway与zuul的区别与联系

前言 zuul1.0与spring-cloud-gateway的区别 Zuul: zuul是netflix公司的项目&#xff0c;本质上是web servlet&#xff0c;基于JavaEE Servlet技术栈&#xff0c;使用阻塞API&#xff0c;处理的是http请求&#xff0c;没有提供异步支持&#xff0c;不支持任何长连接&#xff0c…

Linux——进程信号3

内核如何实现信号的捕捉 信号捕捉的方法出了我们之前的signal之外&#xff0c;还有其它方法 sigaction sigaction&#xff1a;检查或更改一个信号的动作即捕捉信号 第一个参数&#xff0c;要捕捉的信号对应的编号&#xff0c;第二个参数&#xff1a;结构体&#xff08;这个结构…

4种整流电路、5种滤波电路

目录 基本电路变压电路整流电路半波整流电路全波整流电路桥式整流电路倍压整流电路 滤波电路电容滤波电路电感滤波电路RC滤波电路LC滤波电路有源滤波电路 整流滤波电路总结常用整流电路性能对照常用无源滤波电路性能对照电容滤波电路输出电流大小与滤波电容量的关系常用整流滤波…

nodejs+vue大学招聘求职网站

该系统的基本功能包括学生注册登录&#xff0c;企业注册登录&#xff0c;发布个人简历&#xff0c;发布企业招聘信息&#xff0c;新闻资讯&#xff0c;招聘信息&#xff0c;企业管理&#xff0c;学生信息管理&#xff0c;招聘信息管理,修改密码等功能。 系统首页 后台界面 1.…

【设计模式】设计模式简述及类图

设计模式的分类依据两个准则&#xff0c;第一个是目的准则&#xff0c;即模式是用来完成什么工作的。模式依据其目的可以分为创建型、结构型和行为型三种。创建型模式和对象的创建有关&#xff0c;结构型模式处理类或对象的组合。行为型模式对类或对象怎样交互和怎样分配职责进…

随机变量X,分布函数X~F(x)的理解。

1.随机变量X 1.通常认知的"x"与随机变量X 我们通常意义上的 x 是自变量&#xff0c;y f(x) 中的自变量。 但是 X 更多意义是 对应法则 " f " &#xff0c;X完整写法是 X(ω) ω ∈ Ω。 X这个对应法则&#xff0c;可以将样本点映射到实数轴上。 那么X这…

初识linux之POSIX信号量

目录 一、信号量的概念 1. 信号量的作用 2. 信号量的PV操作 3. 信号量操作接口 3.1 初始化信号量 3.2 销毁信号量 3.3 等待信号量&#xff08;P操作&#xff09; 3.4 发布信号量&#xff08;V操作&#xff09; 二、循环队列 三、使用循环队列模拟实现生产消费模型 1…

Spring 组成及拓展

1. Spring 组成 1.1 Spring的七大模块 1.2拓展 在Spring官网有这个介绍&#xff1a;现代化的Java开发&#xff01;说白了就是基于Spring的开发 - SpringBoot - 一个快速开发的脚手架 - 基于SpringBoot可以快速的开发单个微服务。 - 约定大于配置&#xff01; - SpringC…

ENVI实现遥感图像的最小距离、最大似然、支持向量机分类

目录 1 分类需求 2 具体操作 2.1 ROI区域绘制 2.2 最小距离法 2.3 最大似然法 2.4 支持向量机 3 精度评定 4 分类后处理 4.1 小斑块处理 4.2 分类统计 4.3 修改类别颜色 5 结果对比 本文介绍基于ENVI软件&#xff0c;实现最小距离法、最大似然法与支持向量机三种遥…

达索的多领域系统级仿真软件Dymola 2023版本下载与安装配置教程

目录 前言一、Dymola 安装二、使用配置总结 前言 Dymola是由Dassault Systemes公司开发的一款基于物理建模的多领域系统级仿真软件。它包含了多个领域的建模和仿真工具&#xff0c;如机械、电气、液压、热力学、控制等&#xff0c;可以用于对各种系统进行建模和仿真&#xff0…

GcExcel for Java edition 6.1.0 Crack

高速 Java Excel 电子表格 API 库,在 Java 应用程序中以编程方式创建、编辑、导入和导出 Excel 电子表格。几乎可以在任何地方部署。 创建、加载、编辑和保存 Excel 电子表格 保存为 .XLSX、PDF、HTML、CSV 和 JSON 基于具有零 Excel 依赖性的 Excel 对象模型 在本地、内部或云…

利用Facebook群组和页面打造忠实粉丝基础

社交媒体的崛起改变了我们与世界互动的方式&#xff0c;而Facebook作为其中的佼佼者&#xff0c;不仅让我们能够与朋友、家人保持联系&#xff0c;还提供了许多机会用于商业营销。利用Facebook群组和页面来打造忠实粉丝基础是许多品牌成功的关键之一。 一、创建一个引人注目的F…

bat脚本

bat脚本 bat脚本就是DOS批处理脚本&#xff0c;就是将一系列DOS命令按照一定顺序排列而形成的集合&#xff0c;运行在windows命令行环境上。这个文件的每一行都是一条DOS命令 在命令提示下键入批处理文件的名称&#xff0c;或者双击该批处理文件&#xff0c;系统就会调用Cmd.…

Java每日一练(20230513) 输出最值、盛水容器、旋转数组II

目录 1. 输出最值 ※ 2. 盛最多水的容器 &#x1f31f;&#x1f31f; 3. 搜索旋转排序数组 II &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 输出最值…

深度学习环境配置系列文章(二):Anaconda配置Python和PyTorch

深度学习环境配置系列文章目录 第一章 专业名称和配置方案介绍 第二章 Anaconda配置Python和PyTorch 第三章 配置VS Code和Jupyter的Python环境 第四章 配置Windows11和Linux双系统 第五章 配置Docker深度学习开发环境 第二章文章目录 深度学习环境配置系列文章目录前言一&…

VMware常用操作

一、vsphere linux虚拟机在线添加磁盘 1、编辑虚拟机设置 添加硬盘 后面步骤下一步即可 然后ssh 到虚拟机 查看/sys/class/scsi_host/ 有几个hostx按下列方法在线认磁盘 echo "- - -" > /sys/class/scsi_host/host2/scan 1、认到磁盘后创建pv pvcreate /dev/sdb …

【C++ 入坑指南】(04)基础语法

文章目录 一、注释二、变量三、常量四、关键字五、标识符 一、注释 作用&#xff1a;在代码中加一些说明和解释&#xff0c;方便自己或其他程序员阅读代码。 C 中有两种注释&#xff1a; 单行注释&#xff1a; // 描述信息 通常放在一行代码的上方&#xff0c;或者一条语句的…

key_vector详解

key_vector是linux网络路由时&#xff0c;非常重要的一个结构&#xff0c;其定义如下&#xff1a; struct key_vector { t_key key; unsigned char pos; /* 2log(KEYLENGTH) bits needed */ unsigned char bits; /* 2log(KEYLENGTH) bits needed */ unsigned char slen; 子网长…

kubernetes❀资源管理

kubernetes❀资源管理 3. 资源管理3.1 资源管理介绍3.2 YAML语言介绍3.3 资源管理方式3.3.1 命令式对象管理3.3.2 命令式对象配置3.3.3 声明式对象配置 3. 资源管理 3.1 资源管理介绍 在kubernetes中&#xff0c;所有的内容都抽象为资源&#xff0c;用户需要通过操作资源来管…

Git advanced高级操作

这篇文章是继Git概念介绍&#xff0c;常用命令与工作流程整理 配图_TranSad的博客-CSDN博客 之后的一些补充&#xff0c;学习总结一些额外Git操作中的比较常用的操作。所以这篇文章假设你已经有了前面的基础&#xff0c;我就直接说一些没有提到过的部分。 Detached HEAD 在G…