软件包管理工具:yum
查看软件包:yum list|grep key(关键字)
安装软件包:yum install package_name
移除软件包:yum femove package_name
编辑器:vim
vim中的操作方式:12种,常用三种—
普通模式:主要是使用命令进行文件内容操作
插入模式:插入数据
底行模式:用于文件内容的保存和退出
模式切换:
普通->插入 i a o I A O 插入->普通:ESC
i:从光标所在字符开始插入 I:光标移动到行首,开始插入
a:光标向后移动一个字符,开始插入 A:光标移动到行尾,开始插入
o:在光标所在行下方添加新行,开始插入 O:在光标所在行上方添加新行,开始插入
普通模式下的操作:
光标移动操作:
hjkl wb ctrl+f/b gg G
对文件内容操作:
yy:复制光标所在行内容 nyy:从光标所在行开始向下赋值n行数据
p:向光标所在行上方进行粘贴 dd:剪切光标所在行内容 ndd:从光标所在行开始。向下剪切n行数据
dw:删除光标所在单词 x:删除光标所在字符
其他操作:
u:撤销上一部操作
ctrl+r:反撤销
gg(首行)=(对齐)G(尾行)—全文对齐
编译器:gcc/g++
功能:将高级语言解释成机器可识别的指令
预处理:展开所有代码 gcc-E
编译:进行语义语法纠错,若无错误,则将程序解释为汇编语言 gcc-S
汇编:将汇编语言解释成为二进制机器指令 gcc-c
链接:将所有的.o文件和库文件进行打包,最终生成一个可执行程序库文件:封装的函数所打包的一个代码文件
链接方式:
动态链接:链接的是动态库
在可执行程序中添加库中的函数符号信息表,生成的可执行程序比较小,因为并没有把函数的实现直接加入到可执行程序中,因此运行程序的时候需要依赖动态库的存在,但是在内存中,多个程序可以共用相同的库,降低了内存中的代码冗余(又名共享库)
静态链接:链接的是静态库
在生成可执行程序时,直接将库中的所有代码实现都写入到了可执行程序中,生成的可执行程序比较大,在运行程序时,若多个程序都静态链接了同一个库文件,则会在内存中造成代码冗余,但是静态链接的程序运行的时候不需要依赖库的存在
gcc的默认链接方式:动态链接,并且在生成可执行程序的时候默认链接了标准C库
调试器:gdb
调试的前提;生成一个debug版本的程序
gcc默认生成一个release版本的程序,因此需要在编译程序时就使用gcc-g选项生成的debug程序(向可执行程序中添加调试符号信息)
程序调试
1、gdb加载程序符号信息—gdb./main gdb->file./main
2、流程控制指令:
run:直接运行程序–start:开始逐步调试–list:查看调试行附近代码–list file:line
until:直接运行到指定行–until file:line–next:下一步,直接运行函数–step:下一步,跟踪进入函数
continue:从当前位置开始继续运行程序(非逐步调试)
3、断点相关指令:
break:打断点–info break:查看断点信息–delete breakid:删除指定断点
break file:line:给指定文件指定行打断点
break func_name:给指定函数打断点
watch variable_name:给变量打断点(变量监控)
4、其他指令:
quit:退出–backtrace:查看调用栈信息(经常用于快速定位程序崩溃位置信息)
print:打印变量的值
项目的自动化构建工具:make/Makefile
Makefile:普通的文本文件–记录项目的构建流程规则
make:Makefile解释器–逐行解释Makefile中的项目构建规则,完成项目的构建
Makefile的编写规则:
目标对象:依赖对象
\t 要执行的命令
目标对象:要生成的可执行程序名称
依赖对象:源码文件,通过与目标对象的最后一次修改时间判断,目标对象是否需要重新生成
预定义变量:
$^ --表示所有的依赖对象
$@ --表示目标对象
$< --表示第一个依赖对象
“.PHONY”:声明伪对象–不管对象是否最新,是否存在,每次都需要重新生成(通常用于声明clean)
#声明一个伪对象
.PHONY:main
#生成可执行程序
main:main.c child.c
gcc $< -o $@
make的解释执行规则:
1、make在Makefile中只寻找第一个目标对象进行生成,生成完毕则退出
2、在生成目标对象之前,先判断依赖对象是否需要重新生成(先找依赖对象的生成规则,生成依赖对象,再去生成目标对象)
#通配所有的.o的生成规则
%.o:%.c
gcc -c $< -o $@
#wildcard 获取当前路径下以.c结尾的文件名放在src中
src=$(wildcard ./*.c)./main.c ./child.c
#字符替换,将变量内容中的后缀名从.c修改为.o赋值给obj
obj=$(patsubst %.c,%.o,$(src))# ./main.o ./child.o
main:main.o child.o
gcc $^ -o $@
%.o:%.c
gcc $< -o $@
.PHONY:clean
clean:
rm -f main