Linux开发工具
1.编译器GCC(查语法错误)
2.调试器GDB(查功能错误)
3.工程管理器make(效率高、智能)
4.脚本shell(脚本文件不用编译可直接执行)
Linux是不区分拓展名的,但vim和gcc区分
源文件.c–>预处理–>编译–>链接–>可执行
gcc是一个交叉平台编译器,它能够在当前cpu平台上为多种不同体系结构的硬件平台开发软件工程。
C语言(高级语言)–>汇编语言(为C语言提供环境是低级语言)
汇编语言–>C语言
书写格式:
1.所有int定义的都必须有返回值return (int最好不要省略)
2.定义变量最好一行一个,见名思意。
3.运算符和变量最好有1个间隔 如:a = b;但单运算符不要加 如:i++;
4.文件的开头要以单词开头,别用数字有隐患。
单行注释// 多行注释/* */
gcc [-Wall] [-o 1 2 3] [-g] [-o name] file
-Wall:打开所有警告项
-O :设置优先级别 O0表示关闭优化功能
-O1 ,-O2,-O3,-O4表示优化, -O就是-O1。
-g: 将调试信息编译到目标文件中
-o name:指定输出文件的名称是name
file:被编译的文件
-s:生成汇编文件 gcc -s hello.c -o hello.asm
-o: output file name 确定生成执行文件名称,否则自动生成a.out
-E:预处理 gcc -E hello.c (不生成文件,直接在终端上显示)
gcc -E hello.c -o hello.i(生成文件)
-c 只编译生成目标文件 以.o为后缀的文件
在gcc编译中 ,-DMARCO:定义MARCO宏 =define
如gcc hello.c -o hello -DPI=3.1415926
-Idirname:将dirname所指定的目录加入到程序的头文件目录列表中(增加一个搜索头文件的方式)
-I- 取消搜索方式
-Ldirname:将dirname所指的目录加入到库文件中的目录列表中
-lname:指定库名 libname.a
-lm表示名为libm.a的数学函数库
静态库创建的三步骤
1.编写源代码
2.gcc -c 编译生成目标文件.o
3.ar+rcs+静态库名+目标文件1+…+目标文件n
rc:静态库不存在,就创建该库文件
s:实时更新库文件
静态库的使用:
gcc file.c -o file -L.(路径) name(库名)
动态库的创建:
gcc -shared -fPIC -o 库名.so 源文件.c
动态库的使用:
gcc 源文件.c ./库名.so -o 可执行文件名
ar -t libname.a 显示库里的文件
ar -d(有错误不提示) libname.a add.o 删除
ar -dv 有错误会提示 ) libname.a add.o
ar -xv(复制并提醒)libname.a add.o
调试器-gdb(当语法正确时,功能错误时进行的调试)
三个功能:
1.启动被调试程序
2.让被调试的程序在指定的位置停住(设置断点)
3.当程序被停住时,可以检查程序状态-变量值
执行下面两步骤后便进入调试模式(gdb)
$ gcc -g test.c -o test
$ gdb test
(gdb)调试模式中要用调试命令
1.编译生成可执行文件 gcc -g test.c -o test
2.启动GDB gdb test
3.在main函数中设置断点 break main
4.运行程序 run
5.单步运行 next
6.继续运行 continue
调试命令:
list(l)查看程序 每次可看十行
(gdb)break 16 表示:Break point 1 at 地址:file test.c,line 16
(gdb)info break 查看断点
(gdb)r 运行并停在第一断点
(gdb)n 继续运行
(gdb)finish 结束函数的调用运行
(gdb)q 退出调试模式
break(b)+行号:在指定行添加断点
break(b)+函数名:在某函数入口处添加断点
break(b)行号 if 条件 当条件为真时,指定断点生效
例如 b 5 if i=10 表示当i=10时 第5行断点生效
注意的是 这里判断两者相等不能用== !
delete+断点编号 删除断点
break+文件名:+函数名/行号 表示在某个文件的函数或具体某行可以设置断点
clear 清除全部断点 clear+行号/函数名 清楚具体的某个断点
display+表达式(显示表达式的结果)
printf(p) 查看指定的变量值
C语言里函数都是平行的 无主,子关系
next(n)单步运行程序 不进入函数入口 直接当函数当作一个整体进行执行
step(n)单步运行程序 进入函数入口 并跟踪执行
watch变量名对指定变量进行监控
工程管理器make(核心Makefile)
{
1.自动编译管理器
2.它能够根据文件时间戳自动发现更新过的文件而减少编译的工作量(效率高)
}
makefile编写规则:
a.需要有make工具创建的目标体(target),通常是目标文件.o或可执行文件(终极目标)。
b.要创建的目标所依赖的文件;创建每个目标体时所需要运行的命令,这一行必须以制表键tab开头。
例如:
hello:hello.c
gcc hello.o -o hello
hello.o:hello.c
gcc -c hello.c -o hello.o