1
2
3
4
5
6
7
8
9
10
11
12
gcc foo.c -I /home/include -o foo
如果在当前目录没有所需要的头文件,则去这个指定的头文件目录进行搜索(通过引号进入)
-L 和I类似,指定预设的库的路径(首先到指定的目录)
-l 指定具体的库的名字
-static:静态链接库文件。动态是.so为后缀,静态是.a为后缀
-Wall 生成所有的警告信息
-w 不生产警告信息
-D 生成宏,eg:-DMACRO 等效于#define MACRO
-c只编译,不链接成为可执行文件,编译器只能由输入的.c等源代码文件生成.o为后缀的目标文件。
-g 产生调试工具所必要的符号信息,要想调试,就必须加入这个选项。
-O (optimize)对程序进行优化编译,连接,执行效率更高,但是编译速度慢一些
-O2 比-O进行更好的优化,执行效率更高,编译速度更慢
1
2
3
4
5
6
7
8
9
10
1.编译生成可执行文件gcc -g tst.c -o tst
//一定不要忘了-g
2.启动GDB
gdb tst
3. 在main函数处设置断点
break main
4.运行程序
run
5.next
6.continue
1
2
3
4
5
gcc编译阶段:
预处理(Pre-Processing)包含进头文件,宏展开(替换),条件编译预处理
编译(Compiling) 编译成汇编语言
汇编(Assembling) 汇编编译成目标文件
链接(Linking) 链接成为可执行文件

`
gcc通过后缀区别输入文件的类别
.c c语言源代码
.a 由目标文件构成的库文件
.C .cc .cxx 是C++源代码文件
.h 头文件
.i 已经预处理过的C源代码文件
.ii 已经预处理过的C++源代码文件
.o 编译后的目标文件(链接后就是可执行文件)
.s 汇编语言源代码文件
.S 经过预编译的汇编语言源代码文件

gcc是gnu推出的功能强大,性能优越的多平台编译器,是gnu的代表作之一,gcc可以在多种硬件平台上编译出可执行程序,其执行效率与一般的编译器相比要高20%~30%