编译方式与解释方式有何区别

在多道程序环境中,要想将用户源码代码变成一个可以在内存中执行的程序,通常分为3个步骤:编译,链接,载入。

a.编译:将预处理生成的文件,经过词法分析,语法分析,语义分析以及优化后编译成若干个目标模块,可以理解为将高级语言翻译为计算机可以理解的二进制代码,即机器语言。

b.链接:由链接程序将编译后形成的一组目标模块以及他们所需要的库函数链接在一起,形成一个完整的载入模型。链接主要解决模块间的相互引用问题,分为地址和空间分配,符号解析和重定位几个步骤。在编译阶段生成目标文件时,会暂时搁置那些外部引用,而这些外部引用就是在链接时进行确定的,链接器在链接时,会根据符号名称去相应模块中寻找对应的符号,待符号确定之后,链接器会重写之前那些未确定的符号的地址,这个过程就是重定位。链接一般分为静态链接,动态链接。

c.载入:由载入程序将载入模块载入内存。编译和链接是为将用户程序从硬盘上调入内存并将其转换成可执行程序服务的,用编译器时的compile就是在进行编译,link就是链接,运行程序可以看到。以c/c 语言为例,把源文件编译成中间代码文件,在windows下面是obj文件,在linux下是.o文件,该动作被称为编译,然后再把大量的obj文件合成执行文件,这个动作称为链接。

编译时,编译器需要的是语法正确,函数与变量的声明正确,而一般来说,每个源文件都应该对应一个目标文件,链接时主要是连接函数和全局变量,所以可以使用这些中间目标文件来链接应用程序,链接就是那些目标文件之间相互链接自己所需要的函数和全局变量,而函数可能来源于其他目标文件或库文件。

(0)

相关推荐