VSCode + SSH 构建 Linux 远程 C 语言开发环境
通过上面三个简单的例子,我们可以看到:在 VSCode 远程环境中,从多文件管理、到底层 API 的智能补全,再到集成 AI 助手自动生成代码,整个开发体验得到了质的飞跃。Linux C 语言开发中,有大量重复性的结构体定义或模板代码,现在完全可以交给 AI 来完成。
VSCode + SSH 构建 Linux 远程 C 语言开发环境
日常进行 Linux 底层或是车载 BSP 相关的 C 语言开发时,我们通常面对的都是毫无感情的终端黑框框。虽然强迫自己用 vi 或 vim 敲代码看起来很“极客”,但在实际的大型工程中,没有代码补全、没有实时的错误提示,开发效率其实非常低。
虽然你可以花大量时间去魔改 vim 让它接近 IDE 的体验,但这往往吃力不讨好。最直接、最高效的解决方案是:一步到位,使用 VSCode 通过 SSH 远程访问 Ubuntu,实现在 Windows 的 VSCode 中编辑和编译 Linux 中的代码。
今天这篇博客,我就带大家一步步搭建这个能大幅提升幸福感的开发环境。
第一步:配置 Ubuntu 服务端
首先,我们需要在目标 Linux 机器(比如你的 Ubuntu 虚拟机或开发板)上安装并配置必要的服务。
1. 安装网络工具
为了后续能查看服务器的 IP 地址,我们需要先安装网络工具包:
sudo apt install net-tools
2. 安装并启动SSH服务
SSH 是我们远程连接的基础 。
sudo apt install openssh-server
安装完成后,启动 SSH 服务 :
sudo /etc/init.d/ssh start
3. 验证 SSH 状态并获取 IP
检查 SSH 进程是否已经在后台正常运行 :
ps -e | grep ssh
接着,查看本机的局域网 IP 地址 。记下这个地址(例如 192.168.200.136),我们一会儿在 Windows 端会用到 。
ifconfig
第二步:配置 Windows 客户端 (VSCode)
1. 版本避坑指南(必看)
如果你使用的是 Ubuntu 18.04,VSCode 的版本必须小于或等于 1.85.2 。2024年2月发布的 VS Code 1.86 版本提高了对远程服务器 glibc 和 libstdc++ 的版本要求,强行使用新版会导致 SSH 连接失败 。如果是 Ubuntu 20.04 或 22.04,则可以安装最新版 。建议安装低版本后,在设置中禁止自动更新 。
2. 安装 Remote - SSH 插件
打开 Windows 端的 VSCode,进入左侧的插件市场,搜索 ssh,找到由 Microsoft 官方提供的 Remote - SSH 插件并安装 。

3. 配置 SSH 连接
安装完成后,点击左侧工具栏出现的图标
点击SSH栏+号,配置上方连接:ssh 用户名@Ubuntu服务器IP地址 -A
回车后输入用户名即密码就可以连接成功了
4. 连接并安装 C/C++ 插件
保存配置后,点击连接。安装完成后,我们就可以使用 VSCode 进行代码编写和编译了 。同时,为了方便阅读和代码补全,强烈建议在远程端安装 Microsoft 的 C/C++ 插件(C/C++ Extension Pack)。
第三步:常见连接失败排查
在实际配置中,网络或版本问题可能会导致连接失败。遇到问题时,可以参考以下排查思路:
- 报错
GLIBC >= v2.28.0 not found:这就是前文提到的版本更新导致的不兼容 。解决方法是卸载当前 VSCode,安装 1.85.2 历史版本,并设置禁止自动更新 。 - 提示“过程试图写入的管道不存在”或突然连接不上 :
- 排查 Windows IP 和 Ubuntu IP 是否在同一网段,在命令行窗口互 ping 对方 。如果 ping 不通,修改下虚拟机网络连接方式重试 。
- Ubuntu 中查看 SSH 是否运行:
ps -e | grep ssh。 - 如果之前能连突然不能连了,可能是密钥发生变化。删除电脑
C:\Users\你的用户名\.ssh\下的known_hosts文件,重新连接即可 。
第四步:VSCode + SSH 实战
场景一:多文件工程与快捷编译
在实际工程中,我们不可能把所有代码都塞进一个 .c 文件里 。假设我们正在开发一个车载相机的初始化模块,我们需要将代码拆分为头文件和源文件。
在 VSCode 中,你可以非常直观地在左侧资源管理器中右键新建文件:
1. camera_hal.h (头文件)
#ifndef CAMERA_HAL_H
#define CAMERA_HAL_H
void init_vehicle_camera(void);
#endif
2. camera_hal.c(低层实现)
#include <stdio.h>
#include "camera_hal.h"
void init_vehicle_camera(void) {
// 模拟相机硬件的初始化握手
printf("[HAL] Vehicle camera sensor initialized successfully.\n");
}
3. main.c(主程序)
#include <stdio.h>
#include "camera_hal.h"
int main() {
printf("Starting BSP test program...\n");
init_vehicle_camera();
return 0;
}
如何编译运行?
在 VSCode 中,直接按下快捷键 Ctrl + ~ 调出集成终端(Integrated Terminal)。你不需要借助第三方 SSH 客户端,直接在下面敲入 GCC 编译指令即可 :
gcc main.c camera_hal.c -o camera_test
./camera_test

你会发现,编码、编译、运行,所有的操作都在一个窗口内闭环完成了,效率极高。
场景二:“一切皆文件” —— 系统 I/O 编程实战
在 Linux 底层开发中,“一切皆文件” 是最核心的思想 。无论是硬件设备、进程状态,还是配置文件,我们都可以通过统一的文件 I/O 接口 (open, read, write, close) 来操作 。
相比 C 语言标准库的 fopen,在 Linux 系统编程中我们更常使用底层系统调用 。以下是一个模拟写入设备配置信息的例子:
#include <stdio.h>
#include <fcntl.h> // 包含 open 等系统调用宏
#include <unistd.h> // 包含 write, close
#include <string.h>
int main() {
int fd;
const char *config_data = "resolution=1920x1080;fps=60\n";
// 使用 open 打开或创建文件,设置可读写,不存在则创建,权限为 0644
fd = open("camera_config.txt", O_RDWR | O_CREAT | O_TRUNC, 0644);
if (fd == -1) {
perror("Failed to open config file");
return -1;
}
// 将数据写入文件
ssize_t bytes_written = write(fd, config_data, strlen(config_data));
if (bytes_written == -1) {
perror("Failed to write to config");
close(fd);
return -1;
}
printf("Successfully wrote %zd bytes to config file.\n", bytes_written);
// 关闭文件描述符
close(fd);
return 0;
}

得益于 VSCode 的 C/C++ 插件,当你输入 open( 时,它会自动弹出各个宏定义(如 O_RDWR, O_CREAT)的提示,再也不用去翻厚厚的 API 手册了。
场景三:AI 辅助编程 —— 接入 Copilot 辅助写代码
在纯命令行环境或者在嵌入式软件领域很火的Source Insight 4中,我们往往只能死磕代码。但切换到 VSCode 后,最迷人的优势之一就是可以无缝接入各种强大的 AI 插件(如 GitHub Copilot、Codeium 或通义灵码等)。在 Linux C 语言开发中,有大量重复性的结构体定义或模板代码,现在完全可以交给 AI 来完成。

总结
通过上面三个简单的例子,我们可以看到:在 VSCode 远程环境中,从多文件管理、到底层 API 的智能补全,再到集成 AI 助手自动生成代码,整个开发体验得到了质的飞跃。
Linux C 语言开发中,有大量重复性的结构体定义或模板代码,现在完全可以交给 AI 来完成。
更多推荐



所有评论(0)