1.预处理

此阶段主要完成#符号后面的各项内容到源文件的替换,往往一些莫名其妙的错误都是出现在头文件中的,要在工程中注意积累一些错误知识。

(1)、#ifdef等内容,完成条件编译内容的替换

(2)、#include中内容,在当前目录或者指定目录,或者默认目录搜索头文件,并将头文件拷贝到源文件中。

(3)、#define的内容,替换define的内容(包括上一步的头文件中的define内容)

此阶段产生[.i]文件。

2.编译

此阶段完成语法和语义分析,然后生成中间代码,此中间代码是汇编代码,但是还不可执行,gcc编译的中间文件是[.s]文件。

在此阶段会出现各种语法和语义错误,特别要小心未定义的行为,这往往是致命的错误。

第一个阶段和第二个阶段由编译器完成。

3.汇编

此阶段主要完成将汇编代码翻译成机器码指令,并将这些指令打包形成可重定位的目标文件,[.O]文件,是二进制文件。

此阶段由汇编器完成。

4.链接

此阶段完成文件中叼用的各种函数跟静态库和动态库的连接,并将它们一起打包合并形成目标文件,即可执行文件。

此阶段由链接器完成。

gcc编译C语言主要用到以下几个程序:C编译器gcc、汇编器as、链接器ld和二进制转换工具objcopy。
---------------------

最新文章

  1. jquery中 $(document).ready()和window.onload的区别
  2. arc如何破循环或交叉引用
  3. file_get_contents微信头像等待时间过长的原因
  4. Java httpclient请求,解决乱码问题
  5. HDU 5074 Hatsune Miku(DP)
  6. Linux控制台下的快捷键
  7. ToString()使用方法
  8. 执行Sql块
  9. 关于c语言变量的内存分布测试程序
  10. Ansible详解(二)
  11. [bzoj4923]K小值查询
  12. 环境变量方式使用 Secret - 每天5分钟玩转 Docker 容器技术(158)
  13. HBase快照
  14. Service Fabric是什么?
  15. Stream02
  16. MapReduce 概述
  17. [20171031]markhot.txt
  18. QT中QString 与 int float double 等类型的相互转换
  19. ArcMap VBA实现连续编号
  20. idea oracle反向工程生成实体类

热门文章

  1. ajax同步和异步的切换
  2. P1346 电车(dijkstra)
  3. Objective-C反射机制
  4. PHP将两个数组相加
  5. Python 3基础教程25-异常处理
  6. LAMP架构应用实战—Apache服务介绍与安装01
  7. DM8168通过GPMC接口与FPGA高速数据通信实现
  8. Linux 简单socket实现TCP通信
  9. HDU 3696 Farm Game(拓扑+DP)(2010 Asia Fuzhou Regional Contest)
  10. NO5——素数筛选