编译的四个过程-预处理、编译、汇编、链接程序编译成可执⾏⽂件的过程可分为四步:预处理、编译、汇编、链接。下⾯将以main.c为⽬标⽂件进⾏详细讲解:
1、预处理:
通过gcc -E main.c -o main.i    ⽣成.i⽂件将进⾏如下操作:
1、将所有的#define删除,并展开所有的宏定义。
2、处理所有的预编译指令,例如:#if,#elif,#else,#endif等。
3、处理#include预编译指令,将被包含的⽂件插⼊到预编译指令的位置。
4、添加⾏号信息、⽂件名标识,便于调试。
5、删除所有的注释。
6、保留所有的#pragma编译指令,因为在编写程序的时候,我们经常要⽤到#pargma指令来设定编译的状态或者是指⽰编译器完成⼀些特定的动作。
7、⽣成.i⽂件(包括去注释、宏替换、头⽂件展开、条件编译),编译⽣成的.i⽂件不包含任何宏定义,
汇编指令汇总因为宏已经被展开,并且包含的⽂件已经被插⼊到.i⽂件中。
2、编译(C/C++语⾳ ------> 汇编):
通过gcc -S main.i –o main.s    ⽣成.s⽂件,需要进⾏如下操作:
1、扫描、语法分析、语义分析、源代码分析、⽬标代码⽣成、⽬标代码优化。
2、⽣成汇编代码。
3、汇总符号。
4、⽣成.s⽂件。
3、汇编(汇编 ------> ⼆进制):
通过gcc –c main.s –o main.o  ⽣成.o⽂件,需要进⾏如下操作:
1、根据汇编指令和特定平台,把汇编指令翻译成⼆进制形式。
2、合并各个section,合并符号表。
3、⽣成.o⽂件。
4、链接:
链接过程会进⾏如下操作:
1、合并各个.obj⽂件的section,合并符号表,进⾏符号解析。
2、符号地址重定位。
3、⽣成可执⾏⽂件。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。