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++语言编译生产可执行的二进制文件的过程??求大神详尽解释,的主要内容,如果未能解决你的问题,请参考以下文章
golang语言编译的二进制可执行文件为什么比 C 语言大(转载)