.c 到 .exe 的故事
在用C语言写代码前,我们会先创建一个或多个源文件(.c 文件),最终源文件会变成可执行文件(.exe 文件)
Part1. 程序的翻译环境和执行环境
在 ANSI C 的任何一种实现中,存在两个不同的环境:
第一 种是 翻译环境 ,在这个环境中 源代码被转换为可执行的机器指令 ;
第 二 种是 执行环境 ,它用于 实际执行代码 。
Part2. 编译与链接
2.1 翻译环境
如图,每个 源文件 单独经过 编译器 处理,生成 目标文件 ,所有目标文件与 链接库 一起,在 链接器 的作用下生成 可执行文件 。
演示:
创建一个项目,在这个项目下创建三个源文件:
运行后,
查看 .exe 文件:
查看 .obj 文件:
一些细节:
• 组成一个程序的每个源文件通过编译过程分别转换成目标代码(object code);
• 每个目标文件由链接器(linker)捆绑在一起,形成一个单一而完整的可执行程序;
• 链接器同时也会引入标准C函数库中任何被该程序所用到的函数,而且它可以搜索程序员 个人的程序库,将其需要的函数也链接到程序中。
2.2. 编译的几个阶段
我们已经知道了,源文件变成可执行文件需要编译和链接两个过程,那么编译本身有哪些阶段呢?
由图示可看出:编译经历的阶段有 预编译 --> 编译 --> 汇编
接下来细讲每个过程:
注:由于 VS2022 属于集成开发环境,不方便展示细节,
所以接下来我会使用 Linux 环境下的 gcc 来演示编译和链接的过程。
为方便起见,我们只使用 test.c 和 Add.c 文件。
链接链接,通俗来讲就是把多个文件连接起来