目标代码文件、可执行文件和库

目标代码文件、可执行文件和库

C 编程的基本策略是,用程序把源代码文件转换为可执行文件(其中可包含直接启动的机器语言代码)。

目标代码文件、可执行文件和库

典型的 C 实现通过编译和链接两个步骤来完成这一过程。

编译器把源代码转换为中间代码,链接器把中间代码和其他代码合并,生成可执行文件。
目标代码文件、可执行文件和库

C 使用这种分而治之的方法方便对程序进行模块化,可以独立编译单独的模块,稍后再用链接器合并已编译的模块。
通过这种方式,如果只更改某个模块,不必因此重新编译其他模块。另外链接器还将你编写的程序和预编译的库代码合并。

中间文件有多种形式,最普遍的一种是,将源代码转换为机器语言代码,并把结果放在目标文件代码(目标文件)中。

虽然目标文件代码包含机器语言代码,但是不能直接运行。因为目标文件中存储的是编译器翻译的源代码,还不是一个完整的程序。

目标文件缺失启动代码(startup code)。启动代码充当程序与操作系统之间的接口。

目标代码还缺少库函数,几乎所有的 C 程序都要使用 C 标准库的函数。

链接器的作用是,把你编写的目标代码、系统的标准启动代码和库代码这 3 部分合并成一个文件,即可执行文件。
对于库代码,链接器只会把程序中要用到的库函数提取出来。

目标代码文件、可执行文件和库

简而言之,目标文件和可执行文件都由机器语言指令组成。但是目标文件只包含编译器为你编写的代码翻译的机器语言代码,可执行文件中还包含你编写程序中使用的库函数和启动代码的机器代码。

目标代码文件、可执行文件和库

上一篇:软件过程


下一篇:002、【疑问】在不同目录下运行 pytest -sv 所打印的 路径 不一样