很多人写 C++ 卡住的地方,其实不是语法,而是代码写完之后的几步:怎么在 Linux 上把一堆源文件编成一个能跑的程序,跑起来崩了怎么定位到具体哪一行,改完之后怎么只重编改动过的部分。这门课盯的就是这几步。

先确认自己缺的是哪一块

如果你平时在 IDE 里点一下按钮就出可执行文件,换到 Linux 命令行就不知道从哪下手,那缺的是编译链路这一环——编译器和链接器分别做了什么、头文件去哪找、第三方库怎么链进来、报错信息怎么读。这类报错通常不是语法错,而是找不到头文件、找不到符号、库顺序不对,光看提示容易发懵。

如果你能编过,但程序一跑就段错误、或者输出和预期不一样,那缺的是调试这一环:怎么让程序带上调试信息、怎么下断点、怎么看调用栈、怎么在崩溃现场检查变量的值。

如果你每次改动都全量重编,等半天,那缺的是构建管理这一环:Makefile 的规则怎么组织、依赖关系怎么写、哪些写法会让它每次都重编。

这三块在这门课里是分开讲的,你可以按自己的短板跳着看,不必从头顺一遍。

课程从搭一套能用的环境开始

开头部分处理的是最容易被劝退的门槛:在一台机器上跑起 Linux,能远程连上去操作,能在宿主机上直接改虚拟机里的文件,不用来回拷贝。这些步骤本身不难,但第一次做容易在网络上卡住,比如虚拟机的网络模式选错导致连不上、或者 SSH 服务没起来。把它们先走通,后面的编译调试才有地方练手。

这里建议不要只跟着做一遍就算过。环境搭好之后,自己写一个只有两三个文件的小程序,手动敲一遍编译命令,把生成的可执行文件删掉再重来一次,感受一下每一步产出了什么。这个动作花不了多少时间,但比看十遍讲解管用。

编译与调试工具的实际用法

GCC 部分的核心不是记住所有参数,而是搞清楚几个常用的开关各自解决什么问题:只编译不链接、指定头文件和库的搜索路径、生成带调试信息的产物、开优化之后调试会受什么影响。理解了这些,遇到别人给的编译脚本也能看懂它在干什么。

GDB 部分真正要练的是几个动作:启动、设断点、单步、打印变量、看调用栈。难点往往在于程序崩溃时栈已经被破坏,或者用了优化之后的代码,变量被优化掉看不到。这类情况课程里有对应的处理办法,属于实际排查时会反复用到的。

Makefile 部分容易陷入背语法的误区。更值得关注的是依赖关系怎么表达,为什么改了头文件有的目标不会重编,以及变量和模式规则怎么写才能少重复。自己动手把前面那两三个文件的编译过程写成 Makefile,是这一章最合适的练习。

看完应该能回答这些问题

  • 编译报错提示找不到某个头文件或某个符号,分别应该往哪个方向查?
  • 链接时提示未定义引用,和编译期的报错有什么本质区别?
  • 程序崩溃后拿到一份调用栈,怎么判断问题出在自己的代码还是库的调用方式上?
  • 为什么加了优化之后,断点位置和变量显示会和预期不一致?
  • Makefile 里改动一个头文件,哪些目标应该重编、哪些不该?
  • 在一台没有图形界面的远程机器上,怎么定位一个偶发的运行错误?

适合什么状态的人看

适合已经会写基本 C++、但项目一旦离开 IDE 就不知道怎么组织编译的人;也适合平时写脚本和上层代码、需要接手或排查 C++ 服务的人。课程带着一个网络服务器的案例走,但重点不在服务器怎么做,而在于借一个真实项目结构把编译和调试的流程串起来。如果你已经能熟练写 Makefile、用 GDB 排查线上问题,那这门课对你偏基础,可以只看自己不确定的那几节。

零基础学习在Linux上编译调试C++项目视频课程

Linux环境C++项目编译调试全解析

编辑点评

系统讲解Linux下C++项目编译调试,从环境搭建到实战应用,适合初学者及进阶者。

⭐ 编辑推荐

本课程从零基础开始,带你掌握在Linux环境下编译调试C++项目的全过程。
通过实际案例,深入浅出地讲解GCC、GDB、Makefile等工具的使用,让你轻松应对网络服务器实战。

课程亮点

• Linux环境C++项目编译调试
• GCC、GDB、Makefile工具应用
• 网络服务器实战案例

课程目录

第1章 开发环境准备(1小时2分钟7节)
1-1 课程介绍
1-2 VMWare虚拟机安装
1-3 Ubuntu系统在虚拟机中安装
1-4 Ubuntu系统在虚拟机中安装
1-5 远程访问Linux_Openssh安装
1-6 Ubuntu网络配置
1-7 通过共享在windows上直接编辑Linux代码
第2章 GCC编译代码(25分钟5节)
2-1 Linux_GCC介绍
2-2 Linux_GCC参数设置
2-3 GCC多文件编译
2-4 Linux静态编译
2-5 Linux动态库编译和调用
第3章 GDB调试C++代码(37分钟5节)
3-1 GDB介绍和list指令
3-2 GDB设置取消断点和单步调试
3-3 GDB打印和设置内存变量
3-4 GDB常用指令总结
3-5 程序宕掉后通过gdb查看出错信息(core dump)
第4章 Makefile编写项目文件(49分钟9节)
4-1 Makfile介绍
4-2 编写第一个Makefile(修改音视频不同步)
4-3 Makefile文件包含的五部分内容
4-4 编写多文件并包含动态链接库的Makefile
4-5 编写运行引用了so动态库程序的脚本
4-6 Makefile优化添加变量
4-7 Makefile优化添加清理代码块
4-8 Makefile优化使用自动变量
4-9 Makefile编写安装和卸载
第5章 Linux C++网络服务器实战 (44分钟 6节)
5-1 实战介绍并创建自定义socket动态库项目
5-2 封装并创建socket函数
5-3 绑定bind端口开始监听连接并完成代码编译
5-4 创建测试自定义socket库的项目
5-5 完成accept接收浏览器的连接请求
5-6 Recv浏览器发送http头信息并打印

适合人群

  • C++初学者
  • Linux环境开发者
  • 网络服务器构建者

学习收获

熟练使用Linux编译C++项目
掌握GDB调试技巧
搭建网络服务器

祝您学习愉快!

学有所成,前程似锦!