GCC学习
1、gcc是根据后缀名来区分文件的
.c : c语言源文件
.a : 目标文件构成的库文件
.C/.cc/.cxx : c++源文件
.h : 头文件
.i : 预处理过的C源文件
.ii : 预处理过的C++源文件
.o : 编译后的目标文件
.s : 汇编语言源代码文件
.S : 经过预处理的汇编语言源代码文件
2、生成可执行文件四个步骤
预处理 :宏展开,头文件引入,
编译 :
汇编 :
连接 :
3、GCC编译选项
-o :指定可执行文件的名字,默认是a
-c :只做到编译即可,生成.o文件,汇编和连接不做
-g :添加调试信息
-O :对程序进行优化
-I :指定一个gcc可以查找头文件的目录 gcc -Ixx/xx/ xx.c -o xx
-l :
-static :静态连接,每一个程序都只有一份链接库的拷贝(程序和库文件合在一起)
和动态连接不同,动态连接是多个程序共享一份链接库的拷贝
默认采用的是动态连接
-Wall :生成所有的警告信息
-w :不生成任何警告信息
-D :定义宏比如gcc -DN test.c -o test
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#include <stdio.h> //#include "test.h" //#define N int bar(int c, int d) { int e = c + d; printf("sum is %d",e); return e; } int foo(int a, int b) { return bar(a, b); } int main(void) { int i = 0; foo(2, 5); #ifdef N printf("ppppppppppppppppppppppppp"); #endif return 0; } |
GDB常用命令
1、编译的时候带上-g选项,如gcc -g test.c -o test
2、gdb test
3、break(b) main ===》在main函数上打上断点
4、run
5、next(n)===>F6
6、contiue(c)====>f8
7、list(l)
8、info break
9、delete 删除断点
10、step(s)===>F5
11、finish
12、watch
13、quit(q)
14、print(p)