C/C++语言编译生产可执行的二进制文件的过程??求大神详尽解释,

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C/C++语言编译生产可执行的二进制文件的过程??求大神详尽解释,相关的知识,希望对你有一定的参考价值。

    预编译。编译器将你的.c、.cpp源代码,通过解释其中的预编译指令,将源代码转换成相应的没有任何预编译指令的代码。

    编译、优化。将上一步的代码编译成汇编指令,并作一定优化,形成对应的.s汇编代码

    汇编。将.s文件汇编成机器码,形成对应的.o目标文件,此时是不可执行的二进制文件。生成对应的清单文件。为了连接需要,还会生成未定向符号表、导出符号表、地址重定向表等等。

    连接。先根据对应的清单文件、连接文件及之间的调用关系,决定所有的目标文件及引用的库文件在最后可执行文件中的位置;然后做一些其他事情,比如根据符号表等将目标文件中的符号地址补全等等;最终得到可执行文件。

这只是我个人的简单理解,更详尽的解答都可以写成好几本书了=_=望采纳~

参考技术A 我来试试:这应该是编译的几个阶段:
1)词法分析阶段,先把源代码理解成有意义的符号,如 变量,关键字,数字等。
2)再把这些符号的排列进行分析(语法分析)看是否符合C/C++程序的语法规则的规定,从而识别出这些符号排列的语法成份,这样构造成语法树。
3)在语法树上进行计算,从而为符号赋上各种需要的属性值。
4)寻找一种树结构的中间表示,可以进行多遍分析,形成中间代码。
5)将中间代码进行优化,并且翻译成机器指令(要进行指令选择,地址模式选择和寄存器选择)
大致这样的过程。

程序编译链接后形成的可执行文件是啥文件

参考技术A xxxx.exe可以执行文件 参考技术B C语言是一门计算机语言,有自己一定的语法。但是,C语言并不能直接被对象所理解,需要将C语言转变成可执行代码,即二进制代码。在C语言转变成二进制可执行代码时,是以工程为单位的。而一个工程中往往会包含多个C文件。因此,需要将每个C文件都编译成二进制代码。此时,每个C文件所对应的二进制代码是独立的。由于工程是一个系统,所以需要将所有的C文件二进制代码链接到一起,形成一个工程的可执行文件。
综上,编译和链接就是指的将C文件转变成二进制代码,并将各个独立的C文件二进制代码链接到一起,形成一个可执行文件的过程。本回答被提问者采纳

以上是关于C/C++语言编译生产可执行的二进制文件的过程??求大神详尽解释,的主要内容,如果未能解决你的问题,请参考以下文章

C语言——编译器如何将C源文件编译成可执行代码?

golang语言编译的二进制可执行文件为什么比 C 语言大(转载)

写了一个程序可以编译c语言,怎么自动再链接然后执行生成的可执行文件?

使用CMake编译C/C++程序

不同 C 编译器生成的可执行文件的差异

C语言文件的编译与执行的四个阶段并分别描述