目录
一、什么是gcc?
gcc是GNU Compiler Collection的缩写。最初是作为C语言的编译器,现在已经支持多种语言了,如C、Java、Pascal、Ada、COBOL语言等;
可以运行各种liunx 发行版,BSD,以及solaris等多种操作系统,并能够编译X86,X86-64等不同硬件平台上。还可以实现不同平台上的交叉编译,如在liunx平台上编译windows下的可用的软件
二、gcc编译程序的过程
预处理(
Pre-Processing
)
编译(
Compiling
)
汇编(
Assembling
)
链接(
Linking
)
gcc
编译程序过程示意图:
三、gcc命令使用
1.预处理
C编译器对各种预处理命令进行处理
//预处理c文件
gcc -E hello.c -o hello.i
预处理过程:
- 将所有的#define删除,并且展开所有的宏定义
- 处理所有的条件预编译指令,比如#if 、#ifdef、#elif、#else、#endif等
- 处理#include预编译指令,将被包含的文件插入到该预编译指令的位置。
- 删除所有注释“//”和“ /* */”
- 添加行号和文件标识,以便编译时产生调试用的行号及编译错误警告行号。
- 保留所有的#pragma编译器指令,因为编译器需要使用它们
2. 编译
将预处理得到的源代码文件,进行“翻译转换”,产生出机器语言的目标程序,得到机器语言的汇编文件,后缀是.s
//编译成汇编文件
gcc -S hello.i -o hello.s
3.汇编
将汇编代码翻译成了机器码,后缀是.o文件
gcc -c hello.s -o hello.o
4.链接
把各种符号引用和符号定义转换成为可执行文件中的合适信息,后缀是 .out 文件或可执行文件
gcc hello.o -o hello
通常我们可以
一步到位
,直接编译链接成可执行文件
gcc hello.c -o hello
把所有.c文件编译链接成可执行文件main
四、gcc常用选项
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
五、什么是gdb?
gdb是GNU debugger的缩写,是编程调试工具
六、gdb功能
-
启动程序,可以按照用户自定义的要求随心所欲的运行程序。
-
可让被调试的程序在用户所指定的调试的断点处停住 (
断点可以是条件表达式
)
。
-
当程序停住时,可以检查此时程序中所发生的事
-
动态地改变程序的执行环境
七、gdb用法
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
示例:
注意:运用gdb的时候需要编译时加上之前图片中有提到的-g选项,在目标文件中嵌入调试信息,以便gdb之类的调试程序调试
l列出源代码,b设置断点,r运行,n单步跟踪
感谢观看!!!!
以上就是全部内容,如果对您有帮助,欢迎点赞评论,或者发现有哪里写错的,欢迎指正!