赞
踩
我们拿到一个.c或者是.cpp源文件,它是怎么样一步步的变化成一个机器可执行文件的呢?程序的一般编译流程主要包括四大部分:预处理、编译、汇编和链接。下面讲解这四步的具体工作,带你了解源文件到可执行文件是怎样生成的。
这一步由预处理器完成,对源程序中的伪指令(以#开头的指令)和特殊符号进行处理,伪指令包括宏定义指令、条件编译指令和头文件中包含的指令。这一步的主要工作包括以下内容:
这一步由编译器完成,对预处理后的文件进行词法分析、语法分析、语义分析以及优化后生成相应的汇编代码文件。
由汇编器完成,将汇编代码转变成机器可执行的二进制代码(机器码),并生成目标文件。之所以要经过预处理、编译、汇编这么一系列步骤才生成目标文件,是因为在每一阶段都有相应的优化技术,只有在每个阶段分别优化并生成最为高效的机器指令才能达到最大的优化效果,如果一步到位直接从源程序生成目标文件,可能就会失去很多代码优化的机会。
由链接器完成,主要解决多个文件之间符号引用的问题,即symbol resolution。编译时编译器只对单个文件进行处理,如果该文件里面需要引用到其他文件中的符号,比如全局变量或者调用了某个库函数中的函数,那么这时候,在这个文件中该符号的地址是没法确定的,只能由链接器把所有的目标文件链接到一起才能确定最终的地址,并生成最终的可执行文件。无论采用静态链接还是动态链接,都会生成一个可以在计算机上执行的可执行程序。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。