GCC(GNU Compiler Collection)是编译器的集合
gcc:GCC中C编译器
gcc编译过程:预处理(Preprocessing)编译(Compilation)汇编(Assenmbly)链接(Linking)
gcc相当于顶层的管理器, gcc本身并不参与编译的过程。预处理的时候gcc调用cpp预处理,链接时候gcc调用ld链接。所以程序可以实现分布编译。
gcc支持的文件:
- .c C源程序
- .C C++源程序
- .cc C++源程序
- .cxx C++源程序
- .m Objective C源程序
- .i 经过预处理的C源程序
- .ii 经过预处理的C++源程序
- .s 汇编语言源程序
- .S 汇编语言源程序
- .h 头文件
- .o 目标文件
- .a 存档文件
gcc基本用法: gcc [option] file...
- 如果没有给出可执行文件名字,GCC将自动生成一个a.out文件
- -o 将.c预处理、汇编、编译并链接形成可执行文件 (gcc hello.c -o hello)
- -E 将test.c预处理输出test.i文件 (gcc -E hello.c -o hello.i)
- -S 将预处理输出文件test.i汇编成test.s文件 (gcc -S hello.c -o hello.s)
- -c 将汇编输出文件test.s编译输出test.o文件 (gcc -c hello.c -o hello.o)
- -O 使用编译优化级别1编译程序。级别为1-3,级别越大优化效果越好,但编译时间越长(-O1、-O2、-O3)
- -g 产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,就必须加入这个选项
验证一下:
预处理是宏替换和头文件替换,所以会导致程序变长。
执行:在当前目录下执行程序
- ./hello 执行当前目录下的hello文件
gcc -v 查看gcc版本信息
警告:-Wall (warning,all)
gdb调试程序:首先 gcc -g hello.c -o hello 然后 gdb hello
- quit 退出gdb
- l(list)查看源代码
- b(break)设置断点 。 b 6 断点设置在第6行;b getlim 以函数名设置断点;
- run 执行程序 (ctrl+c 中断执行)
- p(print)查看变量值
- c(continue) 继续依次执行,在断点处停下
- step (step into )只执行一行语句,进入函数内部
- next (step over)单步执行,但是不进入函数内部,把函数整体当做一个语句
- finish (step out )当前程序执行完,跳出
- disable 断点失效
- enable 恢复断点
- delete 删除第几个中断点
- clear 通过指定行号或函数名删除断点
gdb还有很多实用的命令,深入底层debug,支持不同的语言等等......