WSL2:开发环境安装
创始人
2024-06-01 01:42:28
0

写在前面

  • 主要是记录一下如何安装和搭建基于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调试程序,即可将源代码迁移至服务器并在服务器上编译该程序,最后在控制台中执行;
  • VS的Linux 控制台可以在调试->Linux控制台中调出;

运行程序

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

服务器上的生成文件

5. 创建文件夹

  • 通过创建文件夹可以分类管理用于不同用途的代码文件;
  • 点击解决方案资源管理器面板的右上角的显示所有文件按钮,可以显示文件资源管理器中的目录结构;

显示所有文件

  • 然后右键添加就可以创建新的文件夹了;

相关内容

热门资讯

人的一生就是为了,传宗接代吗? 人的一生就是为了,传宗接代吗?那当然不是,每个人都有自己的价值观,如果你有这个想法,证明你被他们影响...
洛克王国诙谐神殿怎么打啊,我有... 洛克王国诙谐神殿怎么打啊,我有70的罗隐和51的少林咕咕,和45的音速,还有一只44的火神,这样能过...
手机屏幕上怎么弄出字 手机屏幕上怎么弄出字手机屏幕上怎么弄出字手机屏幕上怎么弄出字:长按手机桌面,然后点击窗口小工具或小组...
跪求花开伊吕波的结局是怎么样的... 跪求花开伊吕波的结局是怎么样的!真的是得了白血病吗?是的话!KIR了编剧楼主哪里得到的消息? 花开...
苏格兰民歌 一路平安 苏格兰民歌 一路平安还没听过,不好意思,帮不了你
谁能帮我起一个好听的英文名(要... 谁能帮我起一个好听的英文名(要中文)男女?女 我比较喜欢--joy(乔伊)、Renee(瑞妮)、Ma...
寻高手对下联~ 寻高手对下联~琵琶琴瑟八大王 王王在上魑魅魍魉四小鬼,鬼鬼靠边!魑魅魍魉四小鬼,鬼鬼靠边魑魅魍魉四...
《一位母亲与家长会》的3道阅读... 《一位母亲与家长会》的3道阅读题1.我没有原文。对不起。2.因为母亲在鼓励她的孩子,她要使自己的孩子...
深深的喜欢等于爱吗? 深深的喜欢等于爱吗?喜欢不等于爱。但当你站在你喜欢的人面前,你只感到开心但当你与你喜欢的人四目交投,...
《人性的弱点》一书作者是谁? 《人性的弱点》一书作者是谁?《人性的弱点》·作者:(美)戴尔·卡耐基文名:DaleCarnegie戴...
浪漫一生的英文怎么写 浪漫一生的英文怎么写a so long liferomance all one's lifeRoma...
古代什么词可以指代美女? 古代什么词可以指代美女?谢谢!一楼的你说的不对吧?我说的是指代,不是形容啊。形容我也会,倾国倾城,冰...
以前有看过部分小说是《神雕侠侣... 以前有看过部分小说是《神雕侠侣》后面的,不知是那部小说? 想问问?不是,是别人续写的一部小说?只是记...
在工作中学习到什么?” 在工作中学习到什么?”工作中可以学到与本职工作相关的技术、技巧。了解工作的流程。以及本工作的重点及注...
《西游记》中女妖怪有不少,其中... 《西游记》中女妖怪有不少,其中最可怜的女妖怪是谁?中女妖怪有不少,其中最可怜的女妖怪是白骨夫人最可怜...
英文名字‘爱丽儿’的英文到底怎... 英文名字‘爱丽儿’的英文到底怎么写?!Alier Ariel作为英文名字,这两个里哪个更好?先谢谢...
武术在实战中有用吗 武术在实战中有用吗真的打架能不能那么帅?有用,一个会武术的人和一个会武术的人格斗,就要使用一些较为复...
关于模拟人生3夜店人生 关于模拟人生3夜店人生1你的Net Framework版本过低,去安装 一个最新版的4.0的2这个问...
吴启华版倚天屠龙记张无忌哪一集... 吴启华版倚天屠龙记张无忌哪一集上的武当山吴启华版倚天屠龙记张无忌哪一集上的武当山,就是扮成个小道童,...
《三国演义》战长沙的时候,如果... 《三国演义》战长沙的时候,如果关羽的拖刀计用全了,能够斩杀黄忠吗?我认为是可以斩杀黄忠的,因为当时黄...