Linux gcc与gdb 环境变量 学习笔记
GCC
GNU工具集
GNU 工具集是由自由软件基金会发起的 GNU 项目孕育而生,始于20世纪80年代初,旨在构建完全自由的操作系统,其核心原则强调用户自由使用、修改和分发软件的权利,极大推动了自由软件运动和开源生态系统发展;
| 工具类别 | 工具名称 | 主要功能 | 应用场景 |
|---|---|---|---|
| 编译器 | gcc/g++ | 将 C/C++ 源代码转换为可执行程序 | 各类 C/C++ 项目开发 |
| 调试工具 | gdb | 设置断点、查看变量、分析内存,辅助代码调试 | 软件开发调试阶段,排查程序错误 |
| 项目构建工具 | make | 依据 Makefile 自动处理编译依赖 | 源文件多、依赖关系复杂的项目 |
| 目标文件分析工具 | objdump | 反汇编目标文件,查看二进制文件内容 | 分析程序底层实现,排查目标文件相关问题 |
| 链接工具 | ld | 合并多个目标文件及库文件为可执行文件 | 编译流程最后阶段,处理目标文件链接 |
| 静态库管理工具 | ar | 创建、修改和操作 .a 静态库文件 | 大型项目中复用通用代码模块场景 |
GCC(GNU Compiler Collection)即 GNU 编译器集合,开源。起初用于编译 C 语言,现支持C++、Java 等多种语言,是 GNU 工具链核心,可跨平台编译。它遵循 GNU 通用公共许可证(GPL),保障用户自由使用、修改、分发软件的权利;
核心是将源代码转换为可执行文件,同时支持跨平台编译,方便在不同系统环境下进行软件开发;
应用场景:在日常软件开发中应用广泛,无论是编写小游戏、工具软件,还是大型系统程序,都需要借助 GCC 将代码编译成可执行程序;
安装:在 Linux 系统中,GCC 一般为预装软件。若未安装,可通过包管理器安装 build - essential 包,该包通常包含 GCC 及其他相关编译工具;
• 安装命令为:sudo apt install build-essential
• 安装完成后,可使用 gcc --version命令来查看 GCC 的版本信息;
GCC(GNU Compiler Collection)是一款功能强大的交叉平台编译器,支持几乎所有主流 CPU 处理器平台。它能够将 C++、C 等源文件转换为可在特定硬件上运行的目标代码,在 Linux 系统中应用广泛;
| 文件后缀 | 文件类型 | 含义说明 |
|---|---|---|
| .c | 源代码文件 | 采用 C 语言编写的源代码文件 |
| .cpp | 源代码文件 | 使用 C++ 语言编写的源代码文件 |
| .h | 头文件 | 源程序中包含的头文件,用于声明函数、变量等 |
| .o | 目标文件 | 源代码经过编译但尚未链接的中间文件 |
| .a | 库文件 | 由目标文件构成的静态库文件 |
| .so | 库文件 | 动态库文件 |
gcc编译过程
gcc编译时默认不指定输出文件名会自动生成 a.out 可执行文件;此模式适用于代码快速验证、临时编译等场景;
语法格式:gcc 文件名(文件名不可丢掉后缀)

除默认模式外,还可在编译时指定输出文件名;
语法格式:gcc 要编译的源文件 -o 生成输出的文件名

编译:
• 语法格式:gcc-S预处理后文件.i -o 汇编文件.s
• 操作:把预处理后的文件转为汇编语言代码,期间开展语法、语义分析及优化;
• 产出:得到汇编语言文件(.s 后缀)
汇编:
• 语法格式:gcc-c汇编文件.s -o 目标文件.o
• 操作:将汇编代码转换为目标机器码,形成目标文件;
• 产出:生成目标文件(.o 后缀)
| 选项 | 功能 | 语法格式 | 应用场景 |
|---|---|---|---|
-o |
指定编译输出文件的名称 | gcc 源文件 -o 输出文件名 |
日常开发中明确输出文件名称,便于管理 |
-c |
只进行编译和汇编,不进行链接,生成目标文件 | gcc -c 源文件 |
生成目标文件用于后续链接,或单独分析目标文件 |
-E |
仅对源文件进行预处理,输出预处理后的代码 | gcc -E 源文件 -o 预处理后文件名 |
检查预处理指令执行情况 |
-S |
将源文件编译为汇编代码 | gcc -S 源文件 |
分析编译器生成的汇编代码,学习汇编语言 |
-g |
生成调试信息,供调试器(如 gdb)调试 | gcc -g 源文件 |
程序调试阶段排查问题 |
-Wall |
开启大部分常见警告信息 | gcc -Wall 源文件 |
发现代码中潜在问题,提高代码质量 |
-std |
指定编程语言标准 | gcc -std=标准 源文件 |
确保代码按特定标准编译,增强兼容性和可移植性 |
GDB
GDB是GNU 项目下的一个功能强大的调试工具,主要用于调试 C/C++/Go等编程语言编写的程序;
| 命令分类 | 具体命令 | 命令说明 | 使用示例 |
|---|---|---|---|
| 程序运行控制 | run / r |
运行程序,直至遇到断点或程序结束 | r |
continue / c |
继续运行程序,直到下一个断点或程序结束 | c |
|
| 代码查看 | list / l |
列出源代码(默认列出当前行附近代码) | ll main(列出 main 函数代码) |
| 断点操作 | break / b |
在指定行号或函数处设置断点 | b 10(在第 10 行设置断点)b main(在 main 函数处设置断点) |
info b |
查看已设置断点的信息 | info b |
|
delete / d |
删除指定编号的断点 | d 2(删除编号为 2 的断点) |
|
| 调试方式 | next / n |
逐过程调试,不进入函数内部 | n |
step / s |
单步调试,进入函数内部 | s |
|
| 变量查看 | print / p |
查看变量的值 | p n(查看变量 n 的值) |
display |
每次程序停止时自动显示变量的值 | display n(自动显示变量 n 的值) |
GDB调试工作流程

环境变量
环境变量是由操作系统维护的一系列键值对(变量名=值),用于存储系统/用户相关的配置信息,影响进程的运行环境,如程序执行路径、用户目录、默认编辑器等;
常见环境变量
| 变量名 | 作用 | 典型值示例 |
|---|---|---|
PATH |
定义系统查找可执行文件的目录路径(多个目录用 : 分隔) |
/usr/local/sbin:/usr/local/bin:/usr/sbin |
HOME |
当前用户的主目录路径(存放个人文件和配置文件) | /home/linux |
USER |
当前登录用户的用户名 | root |
LANG |
系统默认的语言和字符编码(影响命令输出、日期格式等) | zh_CN.UTF-8 或 en_US.UTF-8 |
PWD |
当前工作目录的绝对路径(实时更新) | /home/linux |
SHELL |
当前用户使用的 Shell 解释器路径(如 Bash、Zsh 等) | /bin/bash 或 /bin/zsh |
EDITOR |
默认文本编辑器路径(系统或用户自定义的编辑器) | nano 或 vim |
查看环境变量方法
| 方法 | 适用场景 | 命令格式 | 示例 | 说明 |
|---|---|---|---|---|
echo $变量名 |
查看单个环境变量的值 | echo $变量名 |
echo $PATHecho $HOME |
最简洁的方式,直接输出指定变量的值;仅显示单个变量,新手最常用 |
printenv |
查看所有环境变量(也可单独查看) | printenvprintenv 变量名 |
printenvprintenv PATH |
列出所有环境变量(按字母顺序);也可后跟变量名单独查看;不包含用户自定义变量 |
env |
功能与 printenv 几乎一致 |
envenv 变量名 |
envenv HOME |
等价于 printenv,通常可互换使用;侧重显示环境变量(不包含局部变量) |
临时配置环境变量
在 Linux 系统里,有时你可能想临时设置一些变量,让它们在当前使用的窗口(也就是终端)中生效,当你关闭这个终端或者重启系统后,这些设置就会消失.这种临时配置的方式非常适合用来进行临时测试或者只使用一次的操作;
export 命令:export 命令可用于自定义新的变量,或者对已有的变量进行修改;
• 语法:
• 第一种语法格式:export 变量名=值
• 第二种语法格式:变量名=值export 变量名
示例:
• export MY_VAL="hello world"
• MY_VAL="hello world"
export MY_VAL
说明:创建了一个MY_VAL环境变量,它的值是"hello world";
永久配置环境变量
如果希望环境变量在重启系统或重新登录后仍然有效,需要将配置写入配置文件中;根据影响范围,分为用户级配置(仅当前用户生效)和系统级(全局)配置(所有用户生效);
用户级配置(仅当前用户有效)
适用场景:
• 仅希望当前用户的环境变量设置生效(如个人工具路径、自定义变量);
• 无需管理员权限,直接修改当前用户目录下的配置文件;
常用配置文件
• ~/.bashrc(大多数 Linux 系统默认使用,日常终端操作生效);
• 位于当前用户主目录(~),是隐藏文件(可用 ls -a 查看);
• 每次打开终端时自动加载,影响日常使用的终端窗口;
适用场景:
• 需要环境变量对所有用户生效(如全局工具路径、系统级参数);
• 需管理员权限(使用 sudo 命令,普通用户需联系管理员);
常用配置文件
• /etc/profile(全局登录终端配置,所有用户登录时加载);
保存文件并让配置立即生效:
• source 配置文件名
| 配置类型 | 作用范围 | 配置文件 | 是否需要管理员权限 | 生效方式 | 特点 |
|---|---|---|---|---|---|
| 用户级配置 | 当前用户 | ~/.bashrc 等 |
否 | source 文件名 或重启终端 |
个性化定制,仅自己可用 |
| 系统级配置 | 所有用户 | /etc/profile 等 |
是(需 sudo) |
source 文件名 或新用户登录 |
统一配置,影响所有用户 |
临时配置与永久配置对比
| 特性 | 临时配置 | 永久配置 |
|---|---|---|
| 生效范围 | 局限于当前终端会话;一旦关闭当前终端会话,配置效果即消失,不会影响其他终端会话状态。 | 作用于所有新开启的终端会话;只要是后续新打开的终端,均会应用该配置。 |
| 配置位置 | 直接在命令行输入执行相关命令即可完成配置,无需特定文件存储配置信息。 | 需将配置信息写入系统特定的配置文件,如 .bashrc(Bash shell 配置文件)等;这些文件会在终端启动时被读取,以加载配置。 |
| 撤销方式 | 关闭当前终端会话,配置自动失效;或者在当前会话内手动执行重置命令来撤销配置。 | 打开对应的配置文件(如 .bashrc),找到并删除之前写入的配置行,保存文件后,新打开的终端会话将不再应用该配置。 |
| 适用场景 | 主要用于短期测试新功能、临时使用一些辅助工具等场景;例如,临时设置一个环境变量来测试程序在特定环境下的运行情况。 | 适用于长期使用的工具配置、开发环境搭建等;比如,将常用的命令别名、路径添加等配置写入配置文件,方便每次打开终端都能使用。 |
PATH环境变量
PATH 是 Linux 系统中不可或缺的环境变量,以冒号分隔的形式,有序存储着一系列可执行文件所在的目录路径。这些路径涵盖了系统命令、用户自定义脚本、各类应用程序的存储位置,像 /bin 存放基础系统命令,/usr/bin 容纳用户级工具,~/bin 可用于保存个人脚本;
关键作用:
• PATH 为用户提供了便捷的命令执行方式,在终端输入命令(如 python、git)时,无需输入命令的完整路径,系统会依据 PATH 自动定位对应可执行文件,让用户摆脱繁琐路径输入,高效完成操作;若系统无法在 PATH 指定路径中找到文件,就会反馈 command not found 错误提示;
格式与操作:
• 格式:路径间以冒号分隔,如 /usr/local/bin:/usr/bin:/bin ,路径排列顺序决定检索优先级;
查看与修改:
• 通过 echo $PATH 查看当前配置;
• 使用 export PATH="$PATH:/new_path"可临时添加路径;

/bin/:存放系统基本命令(如
ls、cp、rm),所有用户可用。/sbin/:存放系统管理命令(如
sudo、reboot),需管理员权限。/usr/bin/:存放用户级常用命令(如
python、git)。/usr/local/bin/:存放当前用户通过
pip等工具安装的、仅对当前用户可用的可执行文件。~/.local/bin/:当前用户的私有可执行文件目录(如
pip安装的用户级工具)。~/bin/:当前用户自定义的私有目录(部分系统默认不包含,需手动添加)。
配置PATH要点总结
优先级:
• 用户级与系统级配置冲突时,用户级优先;
• 不同 shell (如 Bash/Zsh)要修改对应配置文件;
撤销配置:
• 用户级:直接删除对应配置文件里的 export 行;
• 系统级:需管理员权限,用 sudo 编辑 /etc/profile ,删除相关行;
注意事项:
• 配置时要保留 $PATH 变量,勿直接覆盖原 PATH;
• 采用绝对路径(如:/usr/bin ),不用相对路径;
• 路径有空格时,用引号包裹,如"$PATH:/home/user/my tools";
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)