WSL2:开发环境安装

news2024/9/30 17:35:32

写在前面

  • 主要是记录一下如何安装和搭建基于WSL2的开发环境;
  • 参考博文:搭建优雅的Windows终端 Windows terminal+scoop+starship;

一、安装WSL2

  • 以管理员身份运行CMD,执行以下命令即可WSL和Linux的默认Ubuntu发行版:
wsl --install
  • 等待安装完成后,重启计算机即可,输入以下命令可以查看安装的WSL版本信息;

查看版本

  • 一些常用的安装相关命令参考:https://learn.microsoft.com/zh-cn/windows/wsl/basic-commands;

二、初始化WSL2上的Ubuntu

  • 打开开始菜单,点击Ubuntu,即可调出Ubuntu系统的终端(就像一个远程服务器一样!):

启动Ubuntu终端

  • 设置用户名和密码如下:
    设置用户名和密码

  • 设置完成后,在CMD中执行以下命令可以查看已经安装的Lunix发行版本:

查看Linux版本

  • 注意重启电脑后,需要打开一次Ubuntu终端以启动Ubuntu;

三、安装跨平台的终端

  • 这个主要是因为CMD只能执行Windows的命令,而WSL对应的Linux发行版的命令需要用别的终端执行,就会显得比较混乱,因此可以下载Windows终端软件,对这些不同的终端作统一的管理(界面也好看一点);
  • Windows终端的下载地址:https://apps.microsoft.com/store/detail/windows-terminal-preview/9N8G5RFZ9XK3?hl=zh-cn&gl=cn;
  • 安装后,可以在Windows终端中切换不同的控制台终端,比如CMD、PowerShell和Ubuntu等:

Windows终端

  • 另外,将PowerShell升级到Powershell7以上,因为Windows自带的版本比较低:

升级PowerShell

四、安装远程服务器的必要工具

  • 从这一步开始,配置的过程就和用虚拟机或者真正的远程服务器类似了;
  • 一些对应关系如下:
    • 远程服务器:WSL下的Ubuntu;
    • 远程路由器:Windows;
    • 本地开发/客户端:Windows;

1. 替换源

  • 执行以下命令打开源配置文件:
sudo vim /etc/apt/sources.list
  • 在里面增加源连接如下:
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse

2. 安装必要工具

  • 执行以下命令安装必要工具:
sudo apt update && sudo apt upgrade -y
sudo apt install curl wget git ca-certificates build-essential net-tools -y
sudo apt install g++ gdb make ninja-build rsync zip -y

五、配置远程服务器的SSH

1. 在服务器上安装SSH服务

  • 在Ubuntu上执行以下命令以重新安装SSH服务:
# 卸载原有的ssh
sudo apt remove openssh-server
# 重新安装ssh
sudo apt install openssh-server -y
# 启动ssh服务
sudo service ssh start
# 查看ssh服务状态
sudo service ssh status
# 设置ssh开机自启动
sudo systemctl enable ssh
  • 查看服务器上的ip地址:
    查看ip

  • 然后就可以在本地通过以下命令连接服务器了:

ssh连接

  • 注意重启服务器之后还需要重启SSH服务,这样本地才能通过SSH远程连接;

2. 固定服务器的ip地址

  • 这里用到的是端口转发技术:

    • 端口转发:将路由器的某个端口和内网的某个ip对应起来,外部的消息就可以由该端口转发给内网的ip,只能单向转发;
    • 端口映射:将路由器的某个端口和内网的某个ip映射起来,外部的消息可以由该端口发给内网的ip,内网的ip也可以经该端口向外界发送消息,是双向映射;
  • 服务器中打开ssh配置文件:

sudo vim /etc/ssh/sshd_config
  • 设置端口转发,转发的端口是2000:

端口转发

  • 这里相当于是将本地电脑(充当服务器)的端口2000和WSL(充当服务器)的ssh对应起来,访问服务器的端口号2000就能转发到WSL的ssh服务;

  • 执行以下命令使服务器上的修改生效:

# 打开防火墙的2000端口
sudo ufw allow 2000
# 重启ssh服务
sudo service ssh restart
# 重启防火墙
sudo ufw reload
  • 以管理员身份在PowerShell配置端口转换:
netsh interface portproxy add v4tov4 listenport=2100 listenaddress=0.0.0.0 connectport=2000 connectaddress=localhost

配置端口转换

  • 这里相当于是将本地电脑(充当路由器)的端口2100监听到的消息转发到本地电脑(充当服务器)的端口2000上;
  • 用以下命令打开本地电脑的2100端口的监听:
netstat -ano | findstr :2100

打开端口监听

  • 如果执行上述命令没有返回结果,则还需要在服务中启动IP Helper服务:

打开服务

  • 最后,就可以通过访问本地电脑(路由器)的2100端口访问服务器的ssh服务:

访问ssh

六、使用VS Code管理远程文件系统

1. 安装插件

  • 在VS Code的扩展中搜索安装remote development插件:

安装插件

  • 如果安装失败,记得检查VS Code是否已升级到最新版本;

2. 新增SSH配置

  • 安装后,会在左边栏出现远程资源管理器
  • 打开远程资源管理器,选择远程,点击下方的SSH栏右方的“+”按钮;
  • 在弹出的命令行中输入SSH连接命令;

输入ssh命令

  • 选择要更新的配置文件,这里选第一个;
    选择更新的配置文件
  • 这样就在配置文件中新增了一个SSH远程主机连接配置;

3. 连接远程主机

  • 点击左下角的绿色按钮,打开远程窗口:

打开远程窗口

  • 在弹出的选项中选择Connect to Host

选择连接到主机

  • 选择刚刚新建的远程主机地址:

选择远程主机配置

  • 当然这里也可以直接输入user@host格式的远程主机地址;
  • 在弹出窗口的上方命令行中输入密码,即可连接远程主机的文件系统:

输入密码

  • 选择Open Folder,在上方命令行中选择要打开的文件夹(通常选择根目录):
    选择打开的文件夹

  • 然后,就可以在左方看到该文件夹下的所有文件,而且可以很方便地查看和编辑文件中的内容:

查看和编辑文件

七、使用VS进行远程开发

  • 注意,使用WSL2作为远程主机要求VS版本在2022v17.0以上,使用WSL1作为远程主机要求VS版本在2019v16.1以上,参看官方文档:https://learn.microsoft.com/zh-cn/cpp/build/walkthrough-build-debug-wsl2?view=msvc-170;

1. 安装所需的开发包

  • 控制面板->程序->程序和功能->卸载或更改程序中,找到安装的VS软件,右键更改调出VS安装器;

调出安装器

  • 勾选以下安装包安装即可;

勾选安装包

勾选安装包

2. 创建新项目

  • 安装完成后,创建一个Linux的C++项目:

选择项目

创建项目

3. 配置远程连接

  • 打开工具->选项,配置远程连接:

配置远程连接

连接到远程主机

  • 打开项目->xxx属性->常规->平台工具集,选择WSL2 GCC Toolset

4. 编写代码和运行程序

  • 新建一个.cpp文件,然后点击GDB调试程序,即可将源代码迁移至服务器并在服务器上编译该程序,最后在控制台中执行;

运行程序

  • 然后在服务器的/projects路径下,能够找到创建的TinyWebserver项目,里面有源代码、可重定位目标文件.o以及可执行目标文件.out

服务器上的生成文件

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

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

相关文章

【聚类】谱聚类解读、代码示例

【聚类】谱聚类详解、代码示例 文章目录【聚类】谱聚类详解、代码示例1. 介绍2. 方法解读2.1 先验知识2.1.1 无向权重图2.1.2 拉普拉斯矩阵2.2 构建图(第一步)2.2.1 ϵ\epsilonϵ 邻近法2.2.2 k 近邻法2.2.3 全连接法2.3 切图(第二步&#xf…

基于jeecgboot的flowable的H5版本在演示系统发布

目前在NBCIO 亿事达企业管理平台上发布了H5的在线演示系统,欢迎大家批评指正。 在nbcio-vue nbcio-vue: NBCIO 亿事达企业管理平台前端代码,基于ant-design-vue-jeecg的前端版本: 3.0.0代码和和flowable6.7.2,初步完成了集流程设…

【Linux】安装MySQL

目录 1.检测当前系统是否安装过MySQL相关数据库 2. 卸载现有的MySQL数据库 3.上传解压 4.顺序安装rpm包 5.启动MySQL 6.查看临时密码 7.登录MySQL 8.开放端口 1.检测当前系统是否安装过MySQL相关数据库 需要通过rpm相关指令,来查询当前系统中是否存在已安…

无法将“django-admin”项识别为cmdlet,函数,脚本文件或可运行程序的名称问题

无法将“django admin”项识别为cmdlet,函数,脚本文件或可运行程序的名称问题 小提示:首先检查一下有没有拼写错误!!!没有的话请继续 我们要知道django装到哪里去了 pip show django 注意:3.0…

Flutter(二)第一个Flutter应用

1.默认应用 在Android Studio中创建好项目以后,项目的入口即是lib下的main.dart import package:flutter/material.dart;void main() {runApp(const MyApp()); } //无状态的组件(Stateless widget) class MyApp extends StatelessWidget {}…

基于paddlex的C#环境配置及其部署【附带安装包】

前言 最近应老师要求部署一个基于paddlex的C#环境,踩了一些坑,经过几个版本的安装测试,最终成功,这里记录一下。此次用到的所有软件的安装包如下: 补充的vs 2019安装包: 官方参考链接(没有环…

Meta利用视觉信息来优化3D音频模型,未来将用于AR/VR

我们知道,Meta为了给AR眼镜打造智能助手,专门开发了第一人称视觉模型和数据集。与此同时,该公司也在探索一种将视觉和语音融合的AI感知方案。相比于单纯的语音助手,同时结合视觉和声音数据来感知环境,可进一步增强智能…

ERD Online 4.0.9 在线数据库建模、元数据管理平台(免费、私有部署)

ERD Online 是全球第一个开源、免费在线数据建模、元数据管理平台。提供简单易用的元数据设计、关系图设计、SQL查询等功能,辅以版本、导入、导出、数据源、SQL解析、审计、团队协作等功能、方便我们快速、安全的管理数据库中的元数据。 4.0.9 ❝ feat(erd): 主键生…

Opencv项目实战:21 美国ASL手势识别

0、项目介绍 首先,我可以保证在这里,你并不需要多么了解深的机器学习算法,我的初衷是通过本项目,激发大家学习机器学习的动力。选择这种手势原因是因为只有24个字母,你的电脑足以带的动,虽然我只训练A、B、…

group by聚合分组后如何获取分组数据

之前用group by分组后一直困惑怎么把分组后的数据拿到,因为分组后同一组的只有一条数据,最后发现了group_concat函数。记录一下,以后能用。语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator…

【MySQL - InnoDB 存储结构】行格式详解

我们平时对 MySQL 的了解都只是限制在使用层面上,但是难道你就没有一个时刻好奇 MySQL 的内部结构嘛,我们通过 SQL 语句插入的一条条记录在 MySQL 底层到底是以什么格式存储的呢 ? 本文就将以 InnoDB 存储引擎为例子,介绍 MySQL 存…

专科top4|临床医生CSC公派博士后美国凯斯西储大学医院赴职

Q医生符合CSC公派博士后申报条件,我们先为其取得Hopkins的邀请函并获CSC批准,后因导师失联,为保险起见,我们又继续申请并获得凯斯西储大学医学院彩虹宝宝和儿童医院的邀请函,该院连续20年被评为全美最好儿童医院&#…

【vulhub漏洞复现】CVE-2015-5254 ActiveMQ反序列化漏洞

一、漏洞详情Apache ActiveMQ是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务,集群,Spring Framework等。配置Apache ActiveMQ需要提前有jdk的环境。基于MQTT,消息订阅和分…

Javascript的API基本内容(三)

一、事件流 假设页面里有个div,当触发事件时,会经历两个阶段,分别是捕获阶段、冒泡阶段简单来说:捕获阶段是 从父到子 冒泡阶段是从子到父实际工作都是使用事件冒泡为主 二、页面加载事件 加载外部资源(如图片、外联CS…

Portraiture4免费磨皮插件支持PS/LR

Portraiture 4免去了繁琐的手工劳动,选择性的屏蔽和由像素的平滑,以帮助您实现卓越的肖像润色。智能平滑,并删除不完善之处,同时保持皮肤的纹理和其他重要肖像的细节,如头发,眉毛,睫毛等。 一键…

Python Flask + Echarts 轻松制作动态酷炫大屏( 附代码)

目录一、确定需求方案二、整体架构设计三、编码实现 (关键代码)四、完整代码五、运行效果1.动态实时更新数据效果图 说明: 其中 今日抓拍,抓拍总数,预警信息统计,监控点位统计图表 做了动态实时更新处理。 ​ 2.静态…

Java岗面试题--Java并发(volatile 专题)

目录1. 面试题一:谈谈 volatile 的使用及其原理补充:内存屏障volatile 的原理2. 面试题二:volatile 为什么不能保证原子性3. 面试题三:volatile 的内存语义4. 面试题四:volatile 的实现机制5. 面试题五:vol…

用c语言模拟实现常用字符串函数

目录 一.常用字符串函数介绍 1.strlen 2. strcpy 3.strcmp 4.strcat 5.strstr 二.模拟实现常用字符串函数 1.strlen 2.strcpy 3.strcmp 4.strcat 5.strstr 一.常用字符串函数介绍 1.strlen 字符串strlen是用来求字符串长度的,我们可以打开cpp网站查看有关…

浅谈模型评估选择及重要性

作者:王同学 来源:投稿 编辑:学姐 模型评估作为机器学习领域一项不可分割的部分,却常常被大家忽略,其实在机器学习领域中重要的不仅仅是模型结构和参数量,对模型的评估也是至关重要的,只有选择那…

vector迭代器失效与深浅拷贝问题

目录 1、vector迭代器失效问题 1.1、insert迭代器失效 扩容导致野指针 意义变了 官方库windows下VS和linux下对insert迭代器失效的处理 1.2、erase迭代器失效 官方库windows下VS和linux下对erase迭代器失效的处理 1.3、迭代器失效总结 2、深浅拷贝问题 1、vector迭…