1、简介

1、概要 

        当我们运用很多方便的IDE编译程序时,只需要简单的点击按钮即可编译得到一个在指定平台的可执行程序,那么其中的过程是什么,这就是我们接下来需要了解的部分!前面说的“编译”得到一个可执行程序,这个“编译”默默的做了很多工,它先对源代码进行编译,生成二进制文件,然后对目标文件进行链接,最后生成一个可执行文件。

        有两个概念编译和链接,对应的编译器链接器

        编译器是语言的翻译程序,它把高级语言程序翻译成低级汇编语言,而汇编语言并不能被计算机识别,必须靠汇编器把它翻译为计算机硬件可识别的机器语言程序。

        源代码------》编译器--------【(编译成汇编代码)》汇编器】--------(汇编成二进制目标文件)》链接器-----(链接成可执行程序)

[Source Code] ---> Compiler ---> [Object code] --*
                                                 |
[Source Code] ---> Compiler ---> [Object code] --*--> Linker --> [Executable] ---> Loader 
                                                 |                                    |
[Source Code] ---> Compiler ---> [Object code] --*                                    |
                                                 |                                    |
                                 [Library file]--*                                    V
                                                                       [Running Executable in Memory]

**问题抛出:为什么编译器不把源代码直接翻译为机器语言呢?确还有经过汇编和链接 

        人们总是懒惰和希望提供效率的,于是就想办法将公共的代码提取出来,汇编成对立的模块存储在目标文件中,甚至将同一类的目标文件打包成库,由于原本写在同一个文件内的代码被分割到多个文件中,那么最终还需要将这些分割的文件拼装起来形成完整的可执行代码。由于文件模块化分割,文件间的符号可能会相互引用,需要处理这种引用关系,重新计算符号的引用地址,这是链接器的基本功能。

        链接方式有静态链接和动态链接   linux静态库和动态库

        对于学习linux的朋友来说绝对错过不来GCC的运用,基本流程详见:gcc编译流程

猜你喜欢

转载自blog.csdn.net/jadeshu/article/details/106481069