编译链接过程:
1.编译过程(以gcc编译器为例)
NOTE:对于VC++6.0来说,编译器为VC,而通过链接器链接之后的可执行代码为xx.exe,其它总体过程是相同的,都包括预处
理,编译,汇编,链接四个过程
图一:gcc编译器编译过程
图二:vc编译链接过程
2.各处理器的具体过程:
1>预编译:
??处理所有的注释,以空格代替
??将所有的#define删除,并且展开所有的宏定义
??处理条件编译指令,#if、#ifdef、#elif、#else、#endif
??处理#include,展开被包含文件
??保留编译器所使用的#pragma指令
2>编译:
??对预处理文件进行一系列词法分析,语法分析和语义分析
1.词法分析:主要分析关键字,标示符,立即数等是否合法
2.语法分析:主要分析表达式是否合法
3.语义分析:在语法分析的基础上进一步分析表达式是否合法
??分析结束后进行代码优化生成相应的汇编代码文件
NOTE:在程序中使用的变量名、函数名、标号等统称为标识符。除库函数的函数名由系统定义外,其余都由用户自定义。C规定,
标识符只能是字母(A~Z,a~z)、数字(0~9)、下划线()组成的字符串,并且其第一个字符必须是字母或下划线。
1
3>汇编:
??汇编器将汇编代码转变为机器可以执行的指令
??每条汇编指令几乎都对应一条机器指令
NOTE:前边的步骤通常就是我们经常说的编译
4>链接器:
链接器的主要作用:把各个模块之间相互引用的部分处理好,使得各个模块之间能
够正确的衔接.(file1.o和file2.o以及libc.a都为二进制代码)
就像玩拼图,如何完美无缝的将各部分链接在一起才是链接器的本职工作。
链接过程:将你写的程序转换过来的二进制代码和库文件二进制代码组合
静态链接:
动态链接:
2
|
|