gcc简介及编译过程
2017-07-17 22:18
218 查看
(1)编译器 gcc 简介
Linux系统下的 gcc(GNU C Compiler)是GNU推出的功能强大、性能优越的多
平台编译器,它是GNU的代表作品之一,gcc是可以在多种硬件平台上编译出可
执行文件的超级编译器,其执行效率比一般的编译器要高出20%-30%。编译器能
将C、C++语言源程序、汇编语言源程序和目标程序编译、链接成可执行文件如
果没有给出可执行文件的名字,gcc将生成一个默认名为a.out的可执行文件。
在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件,而gcc则通过后缀来区别输入文件的类型。
(2)gcc 的编译过程
源文件(.c .h)-> 预处理->编译->汇编->(静态库,动态库)链接->可执行文件
预处理(Preprocessing):产生程序中的警告
主要处理源文件中,以'#'开头的语句,如#include #ifdef #define等,该阶段会产生一个中间文件 (*.i)。
命令 gcc -E -o zmx.i zmx.c。
编译阶段(Compilation): 产生程序中的错误
预处理完成后,gcc首先检查代码的规范性,以及是否有语法错误等。检查无误后,开始把代码翻译成汇编语言。
命令:gcc -S -o zmx.s zmx.i
汇编阶段(Assembly):产生目标文件.o ,是不可执行的二进制文件
在汇编阶段,将输入的汇编文件 *.s,转换成目标文件 *.o, *.o 已经是二进制文件,即 0 和 1的机器语言,但是,它不是可执行的二进制文件。
命令:gcc -c -o zmx.o zmx.s
链接阶段(Linking): 将各个函数生成的.o目标文件链接生成一个工程文件。
前面的过程知识验证该函数的正确与否,只有在连接阶段,将各个函数联合起来。
类如函数中只有一个函数且不是主函数,没有语法错误,预处理和编译都不会产生错误,因为都只是把他当作普通函数来处理,当执行到链接这一步时,将程序整合,必须要有程序的入口和出口,即主函数,所以此时会产生报错。
汇编之后,进入链接。在链接阶段,通过链接各种静态库和动态库,得到可执行文件。
命令:gcc -o star zmx.o
gcc 常见的用法
gcc -o
生成指定的输出文件
gcc -v
查询gcc版本信息
gcc -g
生成调试信息,gdb调试器可以利用该信息
gcc -I
指定额外的头文件搜索路径
gcc -L
指定额外的函数库搜索路径
gcc -static
静态链接库,默认都是动态链接库
gcc -w
不生成任何警告信息
gcc -Wall
生成所有警告信息
Linux系统下的 gcc(GNU C Compiler)是GNU推出的功能强大、性能优越的多
平台编译器,它是GNU的代表作品之一,gcc是可以在多种硬件平台上编译出可
执行文件的超级编译器,其执行效率比一般的编译器要高出20%-30%。编译器能
将C、C++语言源程序、汇编语言源程序和目标程序编译、链接成可执行文件如
果没有给出可执行文件的名字,gcc将生成一个默认名为a.out的可执行文件。
在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件,而gcc则通过后缀来区别输入文件的类型。
(2)gcc 的编译过程
源文件(.c .h)-> 预处理->编译->汇编->(静态库,动态库)链接->可执行文件
预处理(Preprocessing):产生程序中的警告
主要处理源文件中,以'#'开头的语句,如#include #ifdef #define等,该阶段会产生一个中间文件 (*.i)。
命令 gcc -E -o zmx.i zmx.c。
编译阶段(Compilation): 产生程序中的错误
预处理完成后,gcc首先检查代码的规范性,以及是否有语法错误等。检查无误后,开始把代码翻译成汇编语言。
命令:gcc -S -o zmx.s zmx.i
汇编阶段(Assembly):产生目标文件.o ,是不可执行的二进制文件
在汇编阶段,将输入的汇编文件 *.s,转换成目标文件 *.o, *.o 已经是二进制文件,即 0 和 1的机器语言,但是,它不是可执行的二进制文件。
命令:gcc -c -o zmx.o zmx.s
链接阶段(Linking): 将各个函数生成的.o目标文件链接生成一个工程文件。
前面的过程知识验证该函数的正确与否,只有在连接阶段,将各个函数联合起来。
类如函数中只有一个函数且不是主函数,没有语法错误,预处理和编译都不会产生错误,因为都只是把他当作普通函数来处理,当执行到链接这一步时,将程序整合,必须要有程序的入口和出口,即主函数,所以此时会产生报错。
汇编之后,进入链接。在链接阶段,通过链接各种静态库和动态库,得到可执行文件。
命令:gcc -o star zmx.o
gcc 常见的用法
gcc -o
生成指定的输出文件
gcc -v
查询gcc版本信息
gcc -g
生成调试信息,gdb调试器可以利用该信息
gcc -I
指定额外的头文件搜索路径
gcc -L
指定额外的函数库搜索路径
gcc -static
静态链接库,默认都是动态链接库
gcc -w
不生成任何警告信息
gcc -Wall
生成所有警告信息
相关文章推荐
- gcc 编译过程简介
- linux下c程序编译过程及GCC,G++, GDB简介
- C语言基础(21)-C语言编译过程及GCC参数简介
- 编译过程简介
- GCC编译的四个过程
- vi的使用及gcc编译过程
- GCC编译过程
- gcc编译过程
- gcc简介及常用编译选项
- gcc编译过程
- Linux之GCC命令 -- 解析GCC编译的四个过程
- gcc 编译的四大过程(预处理-编译-汇编-链接 )
- [转]GCC编译过程分解
- gcc编译过程概述
- gcc编译过程
- 忙里偷闲( ˇˍˇ )闲里偷学【C语言篇】——(1)GCC介绍及C语言编译过程
- gcc编译C语言程序的执行过程
- GCC执行过程简介
- gcc 编译过程
- gcc 对c文件的编译/汇编/连接的过程的理解