☰
Linux系列(04)——基础开发工具(上)软件包管理器、vim、gcc/g++
2026/10/8 8:22:59 网站建设 项目流程

⭐️博主:此生决int-@CSDN博客

速胜派就是最大的投降派!!!

🔥热门专栏🔥

深入理解 C++ 系列|算法系列

快速复习系列|Linux系列

Gitee地址:财哥 | GitHub地址:财哥


文章目录

    • 上期回顾
  • 2. 基础开发工具
    • 1. 软件包管理器 yum/apt
      • 核心概念
      • yum 三板斧【重点】
      • yum 与 apt 对照【易混】
      • 安装源与包名解读
        • CentOS
        • Ubuntu
    • 2. 编辑器 Vim
      • 核心:多模式【重点】
      • 正常模式命令集
      • 末行模式命令集
        • 命令总结:
      • 批量注释【重点】
      • 配置文件
    • 3. 编译器 gcc/g++
      • 编译四阶段【复习】
        • 条件编译:
      • 3-3 动态链接和静态链接
        • 多文件编译
        • 静态链接
        • 动态链接
      • 3-4 静态库和动态库
        • 静态库 `.a`
        • 动态库 `.so`
      • 动态链接 vs 静态链接【易混】【重点】
      • 其他常用选项(暂时不讲,仅了解)
      • 验证与静态链接准备
    • 下期预告
    • 基础开发工具(中)——makefile、进度条、git
    • 结语

上期回顾

大家好,这里是此生弃int(财哥),欢迎来到我的博客。上一篇我们主要学习了Linux权限相关内容,了解了Linux的权限怎么管理,怎么查看。进一步加深了对Linux这一多用户操作系统的了解。今天我们就开学习一下Linux的一些基础开发工具。!

2. 基础开发工具


1. 软件包管理器 yum/apt

一般软件的安装方式:
1,源码安装
2,软件包安装
3,包管理器安装✅

核心概念

  • 软件包:预编译好、可直接安装的程序成品(对应 Windows 安装包)。
  • 包管理器:负责搜索/下载/安装/卸载软件包的工具,≈ 手机应用商店。
  • 依赖:软件运行还需要其他软件陪着;包管理器的核心价值 = 自动解决依赖(缺失 + 版本兼容)。
  • 安装本质 =网络下载 + 拷贝到系统目录 →需要sudo(root 权限),装一次全系统可用。
  • 软件生态:评估 OS 好坏不只看系统本身,还看内核/社区/文档/用户群体/配套软件。- 软件链条:开发者发源码 → 社区编译打包 → 官方源服务器 → yum/apt 下载安装。
  • 镜像源:保存同样软件包的"复制站点";改内置下载链接 = 换源(国内:阿里云/清华/中科大)。
  • 开源本质是一种商业模式:代码开放,靠服务/支持/定制/平台盈利。

yum 三板斧【重点】

yum list|grep包名# 查:列出并筛选软件包(| 是管道,把前面输出交给后面处理)sudoyuminstall[-y]包名# 装:下载安装并自动处理依赖,-y 自动确认sudoyum remove[-y]包名# 卸:卸载软件包

注意事项:

  • 安装前先ping www.baidu.com验证网络。
  • 同一时刻只能进行一个 yum/apt 操作,否则报"被占用"。
  • 查不到包:包名写错 / 源未配置 / 网络问题。

yum 与 apt 对照【易混】

目的CentOSyumUbuntuapt
搜索yum list | grep 包名apt search 包名
查看信息yum info 包名apt show 包名
查看已安装yum list installedapt list --installed
安装sudo yum install 包名sudo apt install 包名
卸载sudo yum remove 包名sudo apt remove 包名
更新软件源索引yum makecachesudo apt update
升级软件包sudo yum updatesudo apt upgrade

安装源与包名解读

CentOS
  • CentOS 源配置目录:/etc/yum.repos.d/。
    -CentOS-Base.repo= 标准源(稳定);epel.repo= 扩展源(求全)。
  • 装扩展源:sudo yum install -y epel-release。
  • 包名xxx.x86_64 1.0-3.el7 base:x86_64= 64 位架构;el7= 面向 CentOS 7;base= 提供它的软件源名。
Ubuntu
  • Ubuntu 源配置文件:/etc/apt/sources.list;额外源配置目录:/etc/apt/sources.list.d/。
  • sources.list/*.sources= 软件源配置;*.list= 传统的软件源配置文件。

Ubuntu 没有与 CentOSepel-release完全对应的统一扩展源;第三方软件通常通过 PPA、官方提供的软件源等方式添加。

  • Ubuntu 官方仓库主要分为:main= 官方支持的核心软件;universe= 社区维护的软件;restricted= 受限制的专有软件/驱动;multiverse= 受版权或法律限制的软件。
  • 包名tree/jammy,now 2.0.2-1 amd64 [installed]:amd64= 64 位 x86 架构;jammy= Ubuntu 22.04;2.0.2-1= 软件包版本;[installed]= 已安装。

2. 编辑器 Vim

核心:多模式【重点】

  • vim 只是编辑器(写代码),不管编译(gcc)和调试(gdb);IDE = 三者集成。
  • vim 是 vi 升级版,兼容 vi 全部指令;共 12 种模式,掌握 3 种即可。
模式用途进入方式
正常/命令模式(默认)移动、删除、复制Esc随时返回
插入模式输入文字i光标前 /a光标后 /o下方新行
末行模式保存、退出、查找正常模式按:

【易忘】进入 vim 默认是正常模式,直接打字不会输入,是在执行命令。

正常模式命令集

以下命令前加数字=连续执行该命令多少次,或者跳转的第数学行

类别命令
移动h/j/k/l左下上右;G文末;gg文首;#G跳第 # 行;$行尾;^行首;w/e/b按词跳;ctrl+f/b整页;ctrl+d/u半页
删除x删字符;#x删 n 个;dd删行;#dd删 n 行
复制粘贴yy复制行;#yy复制 n 行;yw复制词;p粘贴
替换撤销r替换 1 字符;R连续替换;cw删词并进入插入;u撤销;ctrl+r恢复

末行模式命令集

命令功能
:w/:q/:wq/:q!保存 / 退出 / 保存并退出 / 强制不存退出
:set nu显示行号
:#跳第 # 行
/关键字+n向后查找 + 下一个
?关键字向前查找
命令总结:
作用Vim 命令类似 Windows 命令
复制当前行yyCtrl+C
复制多行nyyShift + 方向键→Ctrl+C
粘贴pCtrl+V
删除当前行ddShift + Home→Delete
删除多行nddShift + 方向键→Delete
删除当前字符xDelete
删除前一个字符XBackspace
撤销uCtrl+Z
重做Ctrl+RCtrl+Y
查找当前单词*Ctrl+F
继续查找nEnter
跳到文件开头ggCtrl+Home
跳到文件末尾GCtrl+End
跳到行首^Home
跳到行尾$End
向前移动一个单词wCtrl+→
向后移动一个单词bCtrl+←
进入插入模式i直接输入
光标后进入插入模式a直接输入
新开一行并进入插入模式oEnd→Enter
替换字符r直接输入新字符
连续替换RInsert
切换大小写~手动修改
块选择Ctrl+v鼠标按列拖选
块选择后批量插入I多行同时输入
退出当前模式EscEsc
末行模式命令
保存:wCtrl+S
退出:qAlt+F4
保存并退出:wqCtrl+S→Alt+F4
不保存强制退出:q!关闭窗口且不保存
显示行号:set nu—
取消行号:set nonu—
执行 Linux 命令:!命令Win+R→ 输入命令
全文替换:%s/旧/新/gCtrl+H
垂直分屏:vs 文件名分屏窗口
分屏切换Ctrl+w

批量注释【重点】

  1. ctrl+v块选择(按列选)→ 2. 选中多行 → 3.shift+i输入//→ 4.Esc应用到所有行。
  • 去注释:ctrl+v选中//→ 按d。

配置文件

  • /etc/vimrc(全用户)vs~/.vimrc(当前用户)。
  • 常用三行:syntax on(高亮)、set nu(行号)、set shiftwidth=4(缩进 4)。
  • 自带教程:vimtutor。

3. 编译器 gcc/g++

gcc,g++大部分选项是一样的,讲解以gcc为主
gcc——C语音
g++——C++
这里关于程序编译的内容,之前已经讲过了,这里稍微复习一下。

编译四阶段【复习】

阶段工作产物选项记忆
预处理宏替换、删注释、条件编译、展开头文件.i-E只改文本
编译翻译成汇编代码.s-S还是文字
汇编翻译成机器码.o目标文件-c不链接
链接合并 .o + 库代码可执行程序无(默认)补 printf 等

记忆:选项依次是:ESc(键盘右上角的退出键),和iso
一般先编译成.o,在编译成可执行程序
-E -S -c都默认前面的命令已经执行了,
代码示例:

gcc-chello.c-ohello.o# .c → .o:预处理 + 编译 + 汇编gcc hello.o-ohello# .o → 可执行文件:链接./hello# 运行当前目录下的可执行文件############################################gcc hello.c-ohello# 一步完成:预处理 → 编译 → 汇编 → 链接./hello# 运行当前目录下的可执行文件
条件编译:

预处理的本质就是修改我们的文本代码,而不是生成机器码。

有时同一份源代码需要根据不同版本保留不同功能。例如,专业版包含收费功能,普通版不包含;或者内核根据硬件情况裁剪功能。条件编译就是根据条件决定哪些代码参与编译。

示例文件feature.c:

#include<stdio.h>intmain(void){#ifdefPRO版printf("professional feature\n");#elseprintf("basic feature\n");#endifreturn0;}

不定义宏时:

gcc feature.c-ofeature ./feature#输出:basic feature

编译时通过命令行定义宏:

gcc -DPRO版 feature.c-ofeature ./feature#输出:professional feature

命令行宏定义的语法是:

gcc-DM源文件-o目标文件 gcc-DM=100源文件-o目标文件
  • -DM:定义宏M,相当于在代码中写#define M。
  • -DM=100:定义宏M,并令它的值为100,相当于写#define M 100。

3-3 动态链接和静态链接

多文件编译

一个大型程序通常不写在一个文件中,而是分成多个源文件。每个源文件可以单独编译成.o目标文件,最后再统一链接。

例如:

gcc-cmain.c-omain.o gcc-cmath.c-omath.o gcc main.o math.o-oapp

流程如下:

main.c → main.o ┐ ├→ 链接 → app math.c → math.o ┘

这样修改math.c时,只需重新生成math.o,不必重新编译没有变化的main.c。

静态链接

静态链接是指在生成程序时,把需要的库代码直接复制进可执行程序。

它的优点是:

  • 程序运行时不需要再寻找外部库;
  • 运行环境更独立;
  • 库代码已经放入程序,运行时通常更直接。

它的缺点是:

  • 多个程序都使用同一份库时,每个程序都保存一份副本,浪费磁盘空间和内存;
  • 库更新后,已经生成的程序不会自动获得新库,通常需要重新链接甚至重新编译所有程序。
动态链接

动态链接是指程序运行时,才加载需要的库。库代码不直接复制到每个程序中,而是由多个程序共同使用。

查看程序依赖哪些动态库:

ldd hello

ldd是查看动态链接依赖的命令。输出中通常会看到类似:

libc.so.6 => /lib64/libc.so.6

printf的具体实现就在 C 标准库的动态库libc.so.6中。gcc链接程序时,会根据需要去系统库目录中寻找它,常见目录包括/usr/lib或/lib64。这就是链接的作用之一:找到程序所需的外部代码,并记录或合并它们。

动态链接把公共库留在系统中,程序运行时再加载;静态链接则在生成程序时把库代码复制进去。

一般都是使用动态链接


3-4 静态库和动态库

静态库.a

静态库是提前打包好的代码集合,文件后缀通常是.a。进行静态链接时,库中被需要的代码会被复制到可执行文件中。

静态库 .a + 目标文件 .o ↓ 链接 可执行程序

程序生成后,即使删除这个静态库,程序通常仍然可以运行,因为所需代码已经被放进可执行文件。

动态库.so

动态库也是提前准备好的公共代码集合,文件后缀通常是.so。进行动态链接时,库代码不会全部复制进可执行文件,而是在程序运行时才加载。

可执行程序 + 动态库 .so ↓ 运行时加载 程序运行

gcc默认使用动态链接。也就是说,直接执行:

gcc hello.c-ohello

通常会生成依赖动态库的程序。

Windows 中对应的常见文件类型是:

LinuxWindows
动态库.so动态库.dll
静态库.a静态库.lib

动态链接 vs 静态链接【易混】【重点】

对比项动态链接静态链接
库代码位置运行时从.so加载生成时复制进程序
程序体积小大
外部依赖依赖,库缺失就挂(网吧关门)不依赖(电脑买回家)
多程序共享共享一份,省内存磁盘各自一份副本
库更新换库即生效需重新链接
gcc 默认是加-static
  • 库后缀:Linux 动态.so/ 静态.a;Windows 对应.dll/.lib。【易忘】
  • 本质:动态链接 = 多程序共享内存中同一份公共代码。

其他常用选项(暂时不讲,仅了解)

选项功能
-o指定输出文件名
-g加调试信息(gdb 调试必需)【重点】
-static静态链接
-shared生成动态库
-O0~-O3优化级别(O0 不优化便于调试)
-w/-Wall关警告 / 开常用警告(推荐 -Wall)
-DM/-DM=100命令行定义宏,等价#define M(用于条件编译、功能裁剪)【易忘】

验证与静态链接准备

# 查看可执行文件类型,以及是否为动态链接filehello# 动态链接通常会显示:dynamically linked# 静态链接通常会显示:statically linked# 查看动态链接依赖的 .so 共享库ldd hello# 动态程序:列出依赖的共享库# 静态程序:通常显示 not a dynamic executable


静态链接方式:gcc -static

gcc-statichello.c-ohello


验证链接方式,使用file查看文件基本信息:

filehello


本系统是自带了静态库,就是默认安装好了,没有安装的可以使用命令:

# 如果需要完整的 GCC 静态链接环境,可检查系统是否提供对应静态库ls/usr/lib/x86_64-linux-gnu/libc.a# c静态库ls/usr/lib/gcc/x86_64-linux-gnu/*/libstdc++.a# c++静态库# 安装命令如下# ==================== Ubuntu / Debian ====================# 安装静态链接所需的 C/C++ 静态库sudoaptupdatesudoaptinstall-ylibc6-dev libstdc++-11-dev# ==================== CentOS / RHEL ====================# 静态链接前安装 C/C++ 静态库sudoyuminstall-yglibc-static libstdc++-static

报错cannot find -lc= 找不到 C 标准库的静态版本 → 装glibc-static。


下期预告

基础开发工具(中)——makefile、进度条、git

结语

本文到此结束,感谢大家的阅读!如果觉得本文对你有所帮助,欢迎点赞、收藏、关注,也欢迎在评论区一起交流讨论。
也欢迎订阅我的
深入理解 C++系列:从语法入门到底层原理,系统掌握现代 C++
算法系列:从入门到精通,蓝桥杯、ACM、LeetCode 与面试算法全路线
快速复习系列:知识梳理、查漏补缺,考前冲刺必备
Linux系列:从零带你系统学习Linux系统,深入理解计算机组成原理!


愿每一次敲下键盘,都比昨天更进一步!
愿每一行代码落下,都让未来多一种可能!

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询