0. 先看懂本文会用到什么
一句话目标:在 Windows 上用 WSL2 跑一个接近真实 Linux 服务器的 Ubuntu 开发环境,然后用 VSCode 写 C++ 后端项目。
适用方向:C++ HTTP 服务、IM 长连接、MySQL、Redis、Protobuf、Drogon 等 Linux 后端项目。
路径概念先搞懂
| 写法 | 含义 | 例子 |
|---|---|---|
~ | 当前 Linux 用户的家目录 | /home/wqf |
/home/wqf/workspace | 推荐的项目工作目录,位于 Linux 文件系统 | C++ 编译更快、权限更简单 |
/mnt/c/... | WSL 里访问 Windows C 盘的路径 | 可以读写 Windows 文件,但不推荐放 C++ 项目 |
. | 当前目录 | code . 表示用 VSCode 打开当前目录 |
.. | 上一级目录 | cmake .. 表示从 build 目录回看项目根目录 |
/home/wqf/workspace,不要放在 /mnt/c/Users/...。WSL2 访问 Windows 文件系统会更慢,C++ 编译时尤其明显。
1. Linux 命令速查:先科普,再操作
下面这些命令会贯穿全文。初学者不要急着背,先知道它们“负责什么”。
| 命令 | 作用 | 本文中的用法 |
|---|---|---|
cd | 切换目录 | cd ~/workspace |
pwd | 显示当前所在目录 | 确认自己是否在 /home/wqf |
mkdir | 创建文件夹 | mkdir echo-server |
mkdir -p | 递归创建文件夹,已存在也不报错 | mkdir -p src include docs scripts |
touch | 创建空文件 | touch main.cpp |
mv | 移动或重命名文件 | mv main.cpp src/main.cpp |
rm -rf | 强制递归删除目录 | rm -rf build,慎用 |
sudo | 以 Linux 管理员权限执行命令 | sudo apt update |
apt clean | 清理 apt 下载缓存 | 修复软件源缓存异常 |
apt update | 更新软件包索引 | 安装软件前通常先执行 |
apt upgrade -y | 升级已安装软件包,-y 自动确认 | 保持系统依赖较新 |
apt install -y | 安装软件包,-y 自动确认 | 安装 g++、cmake、git 等工具 |
sed -i | 直接修改文件内容 | 替换 apt 软件源地址 |
g++ | C++ 编译器 | g++ main.cpp -o app |
./app | 运行当前目录下的可执行文件 | 运行编译出的 C++ 程序 |
cmake .. | 生成项目构建配置 | 在 build 目录里执行 |
make | 按照构建配置编译项目 | 生成 echo-server 可执行文件 |
code . | 用 VSCode 打开当前目录 | 从 WSL 中打开项目 |
service | 启动或管理系统服务 | sudo service redis-server start |
redis-cli ping | 测试 Redis 是否可用 | 返回 PONG 表示正常 |
protoc --version | 查看 Protobuf 编译器版本 | 验证 Protobuf 安装成功 |
常用 WSL 命令也要认识
| 命令 | 作用 |
|---|---|
wsl -l -v | 查看已安装的 Linux 发行版及 WSL 版本。 |
wsl -d Ubuntu-22.04 | 启动指定 Ubuntu 发行版。 |
wsl --shutdown | 关闭所有正在运行的 WSL 实例。 |
wsl --set-version Ubuntu-22.04 2 | 把指定发行版转换为 WSL2。 |
2. 软件包与工具科普
这一节先把后面会安装的软件包讲清楚。知道它们是什么,排错时才不会慌。
基础 C++ 开发工具
| 软件包/工具 | 它是什么 | 为什么需要 |
|---|---|---|
build-essential | Ubuntu 的 C/C++ 基础编译工具集合 | 会安装 gcc、g++、make 等常用工具。 |
gcc | C 编译器 | 编译 C 语言代码,也常作为基础工具链的一部分。 |
g++ | C++ 编译器 | 编译 .cpp 文件,生成可执行程序。 |
gdb | C/C++ 调试器 | 用于定位崩溃、断点调试、查看变量。 |
cmake | 现代 C++ 构建系统生成器 | 管理多文件、多依赖项目,避免长期手写 g++ 命令。 |
make | 构建执行工具 | 读取构建规则并执行编译。 |
git | 版本控制工具 | 记录代码历史、回滚修改、多人协作。 |
curl / wget | 命令行下载与请求工具 | 下载依赖、测试 HTTP 接口。 |
zip / unzip | 压缩包处理工具 | 打包、解压项目或依赖文件。 |
pkg-config | 库信息查询工具 | 帮助 CMake 或编译器找到系统库的位置和参数。 |
后端项目依赖
| 软件包/工具 | 它是什么 | 后端里用来做什么 |
|---|---|---|
protobuf-compiler | Protobuf 编译器,命令是 protoc | 把 .proto 协议文件生成 C++ 代码。 |
libprotobuf-dev | Protobuf C++ 开发库 | 让 C++ 项目能链接并使用 Protobuf。 |
mysql-server | MySQL 数据库服务端 | 保存用户、帖子、好友、消息等数据。 |
libmysqlclient-dev | MySQL C/C++ 开发库 | 让 C++ 程序能连接 MySQL。 |
redis-server | Redis 内存数据库服务端 | 缓存、会话、在线状态、消息队列辅助等。 |
redis-cli | Redis 命令行客户端 | 用 ping 快速检查 Redis 服务是否正常。 |
Drogon | C++ HTTP/Web 框架 | 后续用来写 /ping、注册登录、Feed 接口等。 |
3. 为什么选择 WSL2,而不是虚拟机或纯 Windows
- 目标是开发 Linux C++ 服务端,而不是 Windows 桌面程序;最终部署环境大概率也是 Ubuntu/Linux。
- WSL2 不需要 ISO 镜像、不需要 VirtualBox/VMware,也不需要完整 Linux 桌面,更适合轻量开发。
- 传统虚拟机更像一台完整电脑,但网络、共享目录、性能和配置复杂度会更高。
- Visual Studio 更偏 Windows C++、Win32、.NET、MFC;本项目需要 gcc、cmake、epoll、Redis、MySQL、Protobuf 等 Linux 生态,更推荐 VSCode + Remote WSL。
4. 进入正确工作目录
如果终端路径显示在 /mnt/c/WINDOWS/system32,说明你还在 Windows 文件系统里,不适合在这里写 Linux C++ 项目。
cd ~
pwd
正确结果应该类似:
/home/wqf
创建长期工作目录:
mkdir -p ~/workspace
cd ~/workspace
~/workspace 位于 Linux 文件系统,编译更快、权限更简单、路径更稳定,适合长期存放 C++ 工程。
5. 修复 apt 404 问题并安装基础工具
5.1 处理 apt 404
如果遇到 404 Not Found,通常不是系统坏了,而是 apt 软件源索引过期。先清理并更新索引:
sudo apt clean
sudo apt update
sudo apt upgrade -y --fix-missing
如果仍然报 404,可以换成国内镜像源,例如阿里云镜像:
sudo sed -i 's|http://security.ubuntu.com/ubuntu|http://mirrors.aliyun.com/ubuntu|g' /etc/apt/sources.list
sudo sed -i 's|http://archive.ubuntu.com/ubuntu|http://mirrors.aliyun.com/ubuntu|g' /etc/apt/sources.list
sudo apt clean
sudo apt update
sudo apt upgrade -y
5.2 安装基础 C++ 开发工具
sudo apt install -y \
build-essential \
gdb \
cmake \
git \
curl \
wget \
zip \
unzip \
pkg-config
5.3 验证基础工具
g++ --version
cmake --version
git --version
如果这些命令都能输出版本号,说明最基础的开发环境已经可用。
6. 安装 VSCode 插件并连接 WSL
6.1 安装插件
- Remote - WSL:让 VSCode 直接连接 WSL Ubuntu。
- C/C++:提供 C++ 语法高亮、补全、跳转和调试能力。
- CMake Tools:后续用 CMake 构建项目时更方便。
- CMake:提供
CMakeLists.txt语法支持。
6.2 从 WSL 中打开 VSCode
cd ~/workspace
code .
第一次执行会安装 VSCode Server。成功后,VSCode 左下角应显示 WSL: Ubuntu-22.04。
6.3 打开终端
在 VSCode 顶部菜单点击“终端 → 新建终端”,或使用快捷键 Ctrl + `。终端里应看到类似:
wqf@DESKTOP:~/workspace$
这说明当前 VSCode 终端已经进入 Linux 环境。
7. 创建并运行第一个 C++ 程序
7.1 创建项目目录和文件
cd ~/workspace
mkdir echo-server
cd echo-server
touch main.cpp
mkdir 创建项目目录,touch 创建源文件。项目名 echo-server 可以对应后续的 Echo 信息流或 IM 后端项目。
7.2 写入 main.cpp
#include <iostream>
int main() {
std::cout << "Echo Server started." << std::endl;
return 0;
}
7.3 手动编译运行
g++ main.cpp -o app
./app
看到下面输出,就说明编译器、终端、文件系统和 VSCode 都能正常工作:
Echo Server started.
8. 引入 CMake:从玩具程序走向工程项目
真实 C++ 项目通常有多个源文件、头文件和第三方库。如果一直手写 g++ 命令,项目稍大就会失控,所以要尽早引入 CMake。
8.1 创建 CMakeLists.txt
touch CMakeLists.txt
写入以下内容:
cmake_minimum_required(VERSION 3.16)
project(echo-server)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_executable(echo-server main.cpp)
8.2 用 CMake 构建
mkdir build
cd build
cmake ..
make
./echo-server
build 目录用于存放中间产物,保持项目根目录干净;cmake .. 生成构建配置,make 执行编译。
9. 整理项目结构
不要把所有代码都堆在 main.cpp。中型后端系统从一开始就应该建立清晰目录。
cd ~/workspace/echo-server
mkdir -p src include docs scripts
mv main.cpp src/main.cpp
| 目录 | 用途 |
|---|---|
src/ | source 缩写,存放 .cpp 源代码文件。 |
include/ | 存放 .h / .hpp 头文件。 |
docs/ | 存放项目文档、接口说明、设计记录。 |
scripts/ | 存放脚本工具,例如启动、清理、部署脚本。 |
推荐初始结构:
echo-server/
├── CMakeLists.txt
├── src/
│ └── main.cpp
├── include/
├── docs/
└── scripts/
修改 CMakeLists.txt
cmake_minimum_required(VERSION 3.16)
project(echo-server)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_executable(echo-server
src/main.cpp
)
target_include_directories(echo-server PRIVATE include)
重新构建
rm -rf build
mkdir build
cd build
cmake ..
make
./echo-server
10. 安装后端项目所需依赖
基础环境跑通后,再安装 Protobuf、MySQL、Redis。不要一开始全堆上去,否则出错时很难定位。
sudo apt install -y \
protobuf-compiler \
libprotobuf-dev \
mysql-server \
redis-server \
libmysqlclient-dev
验证 Protobuf
protoc --version
验证 Redis
sudo service redis-server start
redis-cli ping
如果返回:
PONG
说明 Redis 正常。
11. 为什么现在先不做 IM,以及后续路线
IM 长连接涉及 TCP、心跳、断线、连接映射、离线消息、ACK、Protobuf 编解码和并发安全,是项目中最复杂的模块之一。正确顺序是:先 HTTP,再数据库,再业务闭环,最后 TCP IM。
| 顺序 | 任务 | 原因 |
|---|---|---|
| 1 | 确认 WSL2 + VSCode + gcc + cmake 可用 | 保证开发环境稳定,避免后续问题混在一起。 |
| 2 | 搭建 CMake 项目骨架 | 让项目结构可维护,也方便理解后续代码修改。 |
| 3 | 安装并测试 Drogon HTTP 服务 | 先做最简单的 /ping 接口,证明 HTTP 服务可运行。 |
| 4 | 实现用户注册/登录 | 这是帖子、好友、聊天的身份基础。 |
| 5 | 接入 MySQL | 把用户、帖子、好友、消息持久化。 |
| 6 | 实现发帖和 Feed 拉取 | 先跑通 Echo 信息流主链路。 |
| 7 | 实现好友申请/通过 | Feed 和 IM 都依赖关系链。 |
| 8 | 最后实现 TCP IM | 在业务基础稳定后,再做长连接、心跳和离线消息。 |
12. 当前阶段的验收标准
- VSCode 左下角显示 WSL: Ubuntu-22.04。
- 终端位于
/home/wqf/workspace或其子目录,而不是/mnt/c/...。 g++ --version、cmake --version、git --version都能输出版本。main.cpp可以通过g++编译并运行。CMakeLists.txt可以成功生成echo-server可执行文件。redis-cli ping可以返回PONG。