微观的C/C++编译执行过程
Posted 我想月薪过万
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微观的C/C++编译执行过程相关的知识,希望对你有一定的参考价值。
前言
相信能看到这篇文章的同学,是对C语言很热爱的人。
最开始学习C语言的时候,我们大多数人都是用集成开发环境,VS、VC、devc++等。
当我们把C语言源代码写好了之后,在集成开发工具中这里点一下,哪里点一下,代码就跑起来了,这种快乐的感觉的确是对初学者的一种最好的鼓励,可是,你别忘记了,我们要做一个资深的程序员,知其所以然是必不可少的,下面我就带大家了解一下我们编写的C语言源文件(.c)到底是如何一步步变成可执行文件(.exe/.elf) 的
过程
四个过程:
预处理(-E):展开 .h、宏定义等,形成 .i 文件;
编译(-S):生成一个汇编代码文件,形成 .s 文件;
汇编(-c):汇编过程将上一步的汇编代码转换成机器码(machine code),这一步产生的文件叫做目标文件,是二进制格式,形成 .o 文件。
链接:链接过程将多个目标文以及所需的库文件(.so等)链接成最终的可执行文件(executable file)。
友情提示:注意大小写,要不然你会报错的。
代码演示
.c 源代码
#include<stdio.h>
#include<stdlib.h>
#define STR "Hello World"
int main()
{
printf(STR);
return 0;
}
预处理(-E):展开 .h、宏定义等,形成 .i 文件;
gcc -E hello.c -o hello.i
编译(-S):生成一个汇编代码文件,形成 .s 文件;
gcc -S hello.i -o hello.s
汇编(-c):汇编过程将上一步的汇编代码转换成机器码(machine code),这一步产生的文件叫做目标文件,是二进制格式,形成 .o 文件。
gcc -c hello.s -o hello.o
链接:链接过程将多个目标文以及所需的库文件(.so等)链接成最终的可执行文件(executable file)。
gcc hello.o -o hello
在这一步中可能会报错,如下:
你重新生成一下 .o 目标文件,改成别的名字就好了。
根本原因是上一步要用小写的 -c
最后生成的 .exe 双击执行就可以看到 “Hello World” 了。
以上是关于微观的C/C++编译执行过程的主要内容,如果未能解决你的问题,请参考以下文章