Linux笔记3
Linux笔记3
一、基础命令
文件操作
-
cp:复制文件/目录 -
rm:删除文件/目录 -
mv:移动/重命名文件/目录 -
more/cat/less:查看文件内容 -
tail/head:查看文件尾部/头部内容 -
vi/vim:文本编辑器 -
find:查找文件 -
grep:文本内容搜索 -
|:管道符,连接命令 -
tar:打包/解包文件
进程操作
-
ps:查看进程状态 -
kill:终止进程 -
jobs:查看后台任务 -
&:将命令放入后台执行
二、C语言编译流程
编译四阶段
-
预编译:处理宏定义、头文件包含、条件编译等,生成
.i文件 -
编译:将预处理代码转换为汇编代码,生成
.s文件 -
汇编:将汇编代码转换为机器码,生成
.o(Linux)或.obj(Windows)目标文件 -
链接:将多个目标文件与库文件合并,生成可执行文件(
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 ):运行时加载内存
库的制作
- 静态库:
gcc -c add.c max.c # 生成 add.o、max.o
ar crv libfoo.a add.o max.o # 打包为静态库 libfoo.a
- 共享库:
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... )
八、完整开发流程示例
-
编写源文件:
main.c 、 add.c 、 max.c -
编译为目标文件:
gcc -c *.c -
制作库文件:
-
静态库:
ar crv libfoo.a *.o -
共享库:
gcc -shared -o libfoo.so *.o
-
链接生成可执行文件:
gcc -o main main.c -L. -lfoo -
调试:
gcc -g -o main main.c ... → gdb ./main -
运行:
./main

浙公网安备 33010602011771号