Linux笔记3

Linux笔记3

一、基础命令

文件操作

  • cp:复制文件/目录

  • rm:删除文件/目录

  • mv:移动/重命名文件/目录

  • more/cat/less:查看文件内容

  • tail/head:查看文件尾部/头部内容

  • vi/vim:文本编辑器

  • find:查找文件

  • grep:文本内容搜索

  • |:管道符,连接命令

  • tar:打包/解包文件

进程操作

  • ps:查看进程状态

  • kill:终止进程

  • jobs:查看后台任务

  • &:将命令放入后台执行


二、C语言编译流程

编译四阶段

  1. 预编译:处理宏定义、头文件包含、条件编译等,生成 .i 文件

  2. 编译:将预处理代码转换为汇编代码,生成 .s 文件

  3. 汇编:将汇编代码转换为机器码,生成 .o(Linux)或 .obj(Windows)目标文件

  4. 链接:将多个目标文件与库文件合并,生成可执行文件(main/main.exe)

编译命令示例

  • 一步编译(直接生成可执行文件):
gcc -o main main.c add.c max.c
  • 分步编译:
gcc -c main.c   # 生成 main.o(仅编译不链接)
gcc -c add.c    # 生成 add.o
gcc -c max.c    # 生成 max.o
gcc -o main main.o add.o max.o  # 链接生成可执行文件

三、Makefile 自动化编译

  • 作用:管理工程编译流程,实现自动化构建

  • 核心工具: make 命令,读取 Makefile / makefile 脚本执行编译规则

  • 优势:避免重复输入长命令,自动识别修改过的文件并增量编译

四、GDB 调试工具

编译生成调试版本

常用 GDB 命令

命令 功能
l 显示源代码
b 行号 在指定行添加断点
info break 查看所有断点信息
r 运行程序
n 单步执行(不进入函数)
s 单步执行(进入函数内部)
p 变量名 打印变量值
c 继续运行程序
finish 跳出当前函数
bt 查看函数调用栈
q 退出 GDB

五、静态库与共享库(动态库)

库的概念

  • 预先编译好的函数集合,方便代码复用

  • 静态库(Linux: libxxx.a ;Windows: .lib ):编译时链接到可执行文件

  • 共享库(Linux: libxxx.so ;Windows: .dll ):运行时加载内存

库的制作

  1. 静态库:
gcc -c add.c max.c        # 生成 add.o、max.o

ar crv libfoo.a add.o max.o  # 打包为静态库 libfoo.a
  1. 共享库:
gcc -c -fPIC add.c max.c   # -fPIC 生成位置无关代码

gcc -shared -o libfoo.so add.o max.o  # 打包为共享库 libfoo.so

库的使用

gcc -o main main.c -L./path -lfoo  # -L 指定库路径,-l 指定库名(省略 lib 和 .a/.so)

推荐将库文件放入系统标准库目录: /lib 、 /usr/lib ,可省略 -L 参数

查看依赖
ldd ./main

  • 查看可执行程序依赖的共享库:

静态库 vs 共享库区别

特性 静态库( .a ) 共享库( .so )
链接时机 编译时链接 运行时加载
可执行文件体积 较大(包含库代码) 较小(仅记录依赖)
部署方式 独立运行,无需额外库文件 需保证目标机器存在对应共享库
更新方式 需重新编译可执行文件 替换库文件即可,无需重编译

六、核心系统函数示例

  • main() :程序入口函数

  • printf() :标准输出函数(声明于 <stdio.h> )

  • fork() :创建子进程(系统调用)

七、计算机基础架构

  • CPU:包含运算器、控制器,负责指令执行

  • 内存:存储程序和数据

  • I/O 设备:输入/输出设备(键盘、显示器等)

  • 语言转换:

  • 高级语言( a + b )→ 编译 → 汇编助记符( ADD )→ 汇编 → 机器指令( 0101... )

八、完整开发流程示例

  1. 编写源文件: main.c 、 add.c 、 max.c

  2. 编译为目标文件: gcc -c *.c

  3. 制作库文件:

  • 静态库: ar crv libfoo.a *.o

  • 共享库: gcc -shared -o libfoo.so *.o

  1. 链接生成可执行文件: gcc -o main main.c -L. -lfoo

  2. 调试: gcc -g -o main main.c ... → gdb ./main

  3. 运行:./main

posted @ 2026-03-22 19:32  镜草阈显  阅读(19)  评论(0)    收藏  举报