C/C++源代码如何变成可执行程序? |
您所在的位置:网站首页 › 有源代码怎么生成网页链接 › C/C++源代码如何变成可执行程序? |
我想我们一般的话不会去思考这个问题,或者是了解过一些,最近对源文件的编译有了兴趣,然后去找了点资料,在这里以我自己的理解来演示一下这个过程。如果我的理解有错误,欢迎各位在评论区指出。我们先来看一下大致的一个编译过程。
在这里我用了2个.cpp文件(a.cpp和b.cpp)和一个.h头文件,代码如下图所示 首先看main函数写在a.cpp里,b.cpp写了个cxk函数的定义,c.h文件声明了cxk函数和一个宏定义AAA.这里在main先暂时不调用cxk函数。接下来看如何从一个cpp到exe文件的过程。这个过程包括预处理(.cpp变成.i文件)->编译(.i变成.s文件)->汇编(.s变成.o文件)->链接(.o变成.exe),最后我们运行.exe文件。这里我们用g++编译器来完成这几个步骤。
接下来我们通过vscode打开查看这个hello.i文件,可以看到原本只有11行的点cpp文件变成了一个26000多行的大文件。这也正是说明了预处理过程是将我们原本的文件的头文件都插入到我们原本的程序中,我们写的程序上面一大堆内容都是和这两个头文件中的内容直接插入到我们的cpp中的,最明显的就是我们上面的void cxk()这句话的插入,因为原本我们这个是声明我们的头文件#include “c.h”的,这里被替换成了函数声明,同时预处理也将宏定义给替换掉了,我们头文件宏定义了AAA,原本的int a=AAA,在这里变成了int a=10; 这里其实把我们的注释都给去掉了(这里没写注释所以看不到这个效果),所以你反汇编回来的代码是不会带有注释的。 生成的hello.i文件接下来对.i文件进行编译,将我们的预处理文件转化为汇编语言,生成点.s文件 打开hello.s汇编代码(没啥好的没学过汇编基本看不懂) hello.s汇编代码文件将.s文件进行汇编,由汇编变为目标代码,生成.o文件打开生成的hello.o文件 打开我们的.o文件,虽然此时已经变为了能被机器识别的机器码,但是依旧不能成为可执行文件,因为这里来说我用了cout和 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |