gcc中预编译(预处理)、编译、汇编、链接

来源:互联网 发布:adams软件下载 编辑:程序博客网 时间:2024/06/06 03:48

gcc中预编译、编译、汇编、链接

 

一、预编译

操作步骤:gcc -E test.c -o test.i

作用:处理关于 “#” 的指令

1)删除#define,展开所有宏定义。例#define portnumber 3333

2)处理条件预编译 #if, #ifdef, #if, #elif,#endif

3)处理“#include”预编译指令,将包含的“.h”文件插入对应位置。

4)删除所有注释/**/,//。

(5)添加行号和文件名标识,比如:#2 "hello.c" 2,以便于编译时编译器产生调试用的行号信息以及用于编译时产生编译错误或警告时能够显示行号。

(6)保留所有的#pragma编译器指令,因为编译器需要它们。


二、编译

操作步骤:gcc -s test.c -o test.s

作用:

1.词法分析

2.语法分析

3.语义分析

4.产生相应的汇编代码文件

三、汇编

将编译完的汇编代码文件翻译成机器指令,并生成可重定位目标程序的.o文件,该文件为二进制文件,字节编码是机器指令。

操作步骤:gcc -c test.c -o test.o

作用:汇编器是将汇编代码转变成可以执行的指令,生成目标文件。

四、链接

通过链接器将一个个目标文件(或许还会有库文件)链接在一起生成一个完整的可执行程序。

操作步骤:gcc hello.o -o hello

作用:获得目标代码后,但是里面的各个地址还没有确定,空间还没有分配。

链接过程主要包括:地址和空间的分配,符号决议和重定位。

 

本篇博文写的稍有点浅显,懂就行了……因为小女子只懂这么多了嘿嘿

 

 

阅读全文
1 0
原创粉丝点击