从零搭建 WSL2 + Ubuntu C/C++ 开发环境:原理、实践与底层架构解析

目录

  • 前言
  • [一、 什么是 WSL2?](#一、 什么是 WSL2?)
  • [二、 安装 WSL2 与 Ubuntu 操作系统](#二、 安装 WSL2 与 Ubuntu 操作系统)
  • [三、 系统初始化与新手避坑](#三、 系统初始化与新手避坑)
    • [3.1 设置纯英文字母用户名](#3.1 设置纯英文字母用户名)
    • [3.2 避坑指南:密码盲打机制](#3.2 避坑指南:密码盲打机制)
  • [四、 搭建 C/C++ 核心编译环境](#四、 搭建 C/C++ 核心编译环境)
  • [五、 部署 VS Code 可视化开发环境](#五、 部署 VS Code 可视化开发环境)
  • [六、 编译运行与文件标识陷阱](#六、 编译运行与文件标识陷阱)
    • [避坑指南:带 `*` 号的可执行文件](#避坑指南:带 * 号的可执行文件)
  • [七、 跨系统文件互通魔法:文件到底存在哪?](#七、 跨系统文件互通魔法:文件到底存在哪?)
    • [7.1 从 Linux 到 Windows](#7.1 从 Linux 到 Windows)
    • [7.2 从 Windows 访问 Linux](#7.2 从 Windows 访问 Linux)
    • [7.3 底层警告:VHDX 虚拟磁盘](#7.3 底层警告:VHDX 虚拟磁盘)
  • [八、 进阶解析:本地 WSL2 与云服务器的网络及硬件差异](#八、 进阶解析:本地 WSL2 与云服务器的网络及硬件差异)
    • [8.1 NAT 网络隔离](#8.1 NAT 网络隔离)
    • [8.2 为什么这是嵌入式开发的"终极形态"?](#8.2 为什么这是嵌入式开发的“终极形态”?)
  • 结语

🎬 云泽Q个人主页
🔥 专栏传送入口 : 《C语言》《数据结构》《C++》《Linux》《蓝桥杯系列》《笔试算法》《AI赋能》《STM32》《Python

⛺️遇见安然遇见你,不负代码不负卿~


前言

大家好啊,我是云泽Q,欢迎阅读我的文章,一名热爱计算机技术的在校大学生,喜欢在课余时间做一些计算机技术的总结性文章,希望我的文章能为你解答困惑~

对于零基础想要学习 Linux 操作系统或底层 C/C++ 开发的初学者而言,环境搭建往往是劝退的第一步。传统的双系统安装风险较高,而 VMware 等虚拟机则存在资源占用大、文件交互不便等问题。

本文将详细介绍如何通过 Windows 官方提供的 WSL2 技术,搭配 Visual Studio Code(VS Code),在不重装系统、不忍受虚拟机卡顿的前提下,搭建一个轻量、高效且原汁原味的 Linux 开发环境。同时,本文也会解答新手关于文件存储位置、网络远程连接等核心底层逻辑的疑惑。

一、 什么是 WSL2?

WSL 全称为 Windows Subsystem for Linux(适用于 Linux 的 Windows 子系统)。

早期的 WSL1 本质上是一个系统调用翻译层,存在一定的兼容性问题。而如今主流的 WSL2 发生了根本性的架构演进:它基于底层的 Hyper-V 虚拟化技术,在 Windows 内部运行了一个真正的、完整的 Linux 内核

这意味着,你在 WSL2 中敲下的每一行命令、运行的每一个系统调用,都与真实的物理机 Linux 服务器完全一致。它拥有极快的启动速度(几秒内即可响应),极低的系统资源占用,并且是目前 Windows 环境下学习 Linux 的最省钱的解法之一。

二、 安装 WSL2 与 Ubuntu 操作系统

在 Windows 10(需 2004 以上版本)或 Windows 11 系统中,安装过程已被极大简化。

  1. 单击 Windows 任务栏的搜索图标,输入 PowerShell
  2. 在搜索结果中找到"Windows PowerShell",右键单击并选择"以管理员身份运行"。
  3. 在弹出的命令行窗口中,输入以下命令并按回车键:
bash 复制代码
wsl --install -d Ubuntu

该命令会自动开启系统底层所需的虚拟机平台组件,并从官方服务器下载最新的 Ubuntu 发行版镜像。如果你在对应指令执行结束后只开启了系统底层所需的虚拟机平台组件

就需要在重启电脑侯再次打开PowerShell执行一次上面的指令,此时它就会直接从官方服务器下载最新的 Ubuntu 发行版镜像

  1. 重启计算机:等待进度条走到 100% 后,命令行会提示操作成功。此时必须重启计算机,以使底层的虚拟化引擎正式生效。

三、 系统初始化与新手避坑

重启计算机后,系统通常会自动弹出一个带有 Ubuntu 标志的黑色命令行窗口(若未自动弹出,可在开始菜单搜索"Ubuntu"打开)和一个企鹅标注的程序(不用管它)。系统解压完毕后,将进入账号密码初始化环节。

在这里插入图片描述

3.1 设置纯英文字母用户名

系统会提示 Enter new UNIX username:。请输入一个纯小写英文字母的用户名(如你的姓名拼音),不要包含大写字母、中文、空格或特殊符号。输入完毕后按回车。

3.2 避坑指南:密码盲打机制

系统提示 New password: 时,会有一个小细节

  • 现象: 在键盘上输入密码时,屏幕上不会显示任何字符,甚至连代表密码长度的星号(*)都没有。
  • 底层逻辑: 这是 Linux 历史悠久的安全机制,旨在防止旁人通过字符数量推测密码长度。
  • 应对方案: 键盘并未失灵。请放心"盲打"密码,按回车后,在 Retype new password: 提示下再次盲打确认即可。

四、 搭建 C/C++ 核心编译环境

刚装好的 Ubuntu 内部尚未安装编译器。我们需要通过命令行安装开发工具链。在绿色的命令提示符下,依次执行以下两条命令(遇提示输密码时同样盲打):

1. 更新软件源列表:

bash 复制代码
sudo apt update

2. 安装开发工具包:

bash 复制代码
sudo apt install build-essential gdb git cmake -y

此命令将一键安装 gcc 编译器、gdb 调试器等核心组件。

五、 部署 VS Code 可视化开发环境

如果不喜欢这种纯黑框框的命令行模式,也可引入 VS Code 作为"可视化仪表盘"。

  1. 在 Windows 系统中正常安装 Visual Studio Code。

  2. 打开 VS Code,在"扩展"应用商店中搜索 WSL,认准 Microsoft 官方提供的同名插件并安装。

  3. 回到 Ubuntu 黑色终端中,输入 cd ~ 确保处于用户主目录。

  4. 输入以下命令并回车:

bash 复制代码
code .

(注意:code 单词后有一个空格和英文句号 .)

若是显示command not found,可以关闭这个黑框框命令行窗口重新打开Ubuntu就好了

此时会弹出一个全新的 VS Code 窗口。观察其左下角,若显示绿色的 >< WSL: Ubuntu,代表编辑器已经成功突破物理机限制,完全运行在底层的 Linux 环境中。

六、 编译运行与文件标识陷阱

在 VS Code 中新建一个 hello.c 文件,输入基础 C 语言代码。随后唤出 VS Code 的内置终端,输入编译命令:

bash 复制代码
gcc hello.c -o hello

当然,我还是推荐初步学Linux要熟悉黑框框这样的终端窗口之后,再尝试配合VsCode来玩

避坑指南:带 * 号的可执行文件

若在终端输入 ll 查看文件列表,你会看到编译出的程序名为 hello*

  • 陷阱解析: 这个 * 不是文件名的一部分,而是系统添加的视觉标识符 。左侧权限列的 x(可执行权限)触发了该星号的显示,用于告诉用户这是一个可运行的程序。
  • 正确执行方式: 运行程序时绝不能输入星号,且必须加上代表当前目录的 ./ 前缀。正确命令为:
bash 复制代码
./hello

七、 跨系统文件互通魔法:文件到底存在哪?

新手常有的疑问是:在 Linux 黑框框里创建的代码,到底保存在哪?

答案是:完全保存在本地物理硬盘上。微软在 Windows (NTFS) 和 Linux (ext4) 两个独立的文件系统之间,搭建了极其巧妙的桥梁。

7.1 从 Linux 到 Windows

在你的 Ubuntu 终端中,只需输入以下命令:

bash 复制代码
explorer.exe .

(注意空格和句号) 。系统会瞬间弹出一个 Windows 文件资源管理器

7.2 从 Windows 访问 Linux

在任意 Windows 文件夹的顶部地址栏中输入 \\wsl$ 并回车,即可看到一个名为 Ubuntu 的网络驱动器,内部就是完整的 Linux 根目录。

7.3 底层警告:VHDX 虚拟磁盘

在物理层面上,整个 Linux 系统的所有文件都被打包成了一个巨大的 ext4.vhdx 虚拟磁盘文件(通常深藏于 Windows 的 AppData 目录下)。

极其重要: 绝不要尝试用任何第三方磁盘工具直接打开或修改这个 VHDX 文件,这会导致 Linux 系统彻底崩溃。双向文件访问请务必只使用上述两种官方网络映射方法。

八、 进阶解析:本地 WSL2 与云服务器的网络及硬件差异

很多人会问:既然它是一台完整的 Linux,那我能像连接云服务器一样,用 Xshell 远程连接它吗?

8.1 NAT 网络隔离

默认情况下是不行的。云服务器拥有暴露在公网的独立 IP,而 WSL2 采用的是 NAT(网络地址转换)模式。你的 Windows 充当了路由器,将 WSL2 藏在了内部的虚拟局域网中。外部设备只能看到你 Windows 电脑的 IP,无法直接穿透防火墙连接到内部的 Linux。

8.2 为什么这是嵌入式开发的"终极形态"?

对于 Web 后端开发,24 小时在线的云服务器是刚需。但对于嵌入式、机器人、底层驱动开发 而言,WSL2 才属于比较合适的选择,原因在于物理硬件的连接限制

  • 云服务器的痛点: 嵌入式开发需要频繁调试物理硬件。你无法将桌面上的一块 ARM 开发板或一根 J-Link 烧录线,隔空插到几千公里外的云机房里。
  • WSL2 的降维打击: 因为 WSL2 就在你本地的机器上。借助微软官方的 usbipd 工具,你可以将插在 Surface USB 接口上的任何硬件设备,直接"穿透"进底层的 Linux 内核。你在 VS Code 中点击编译,代码就能顺着真实的 USB 线缆烧录到开发板上。

结语

相关推荐
初願致夕霞7 小时前
C++11:类型推导与完美转发复盘笔记
c++
小猪写代码7 小时前
C++中什么是类,什么是对象
c++
bosins7 小时前
彻底解决 WSL 2.7+ 空闲自动关闭/内存回收导致 Docker 中断的问题
linux·docker·wsl·dashboard
LongRunning8 小时前
【Linux】H3网络(二)
linux
xx~t9 小时前
嵌入式学习——ARM1
linux·arm开发·嵌入式硬件·arm
xx~t9 小时前
嵌入式——ARM1(详细篇)
linux·arm开发·嵌入式硬件·arm
YCOSA20259 小时前
雨晨 Windows 10 企业版 LTSC x64 中度精简 1809 迎双节 17763.9257 特别版
windows
sukalot10 小时前
windows 驱动实例分析系列: HidHide 驱动分析 - drivers 篇(四)
windows·驱动开发
钓鱼的肝11 小时前
梳理(1-5)
c++·经验分享·笔记·算法·青少年编程