在Linux操作系统下,一份普通的c|c++ 代码需要执行一般会经过以下几个步骤(以c为例);
![](https://i-blog.csdnimg.cn/blog_migrate/db299ac8f9f1ac3dc6b9aac5fe863fba.png)
![](https://i-blog.csdnimg.cn/blog_migrate/aaef0c5a144de5dae32ab4e2759eac5e.png)
预编译:删除注释,处理预处理指令,头文件等(带“#”的部分),然后生成后缀为 ".i"的文件
![](https://i-blog.csdnimg.cn/blog_migrate/fb22c9af987e23d6a6b2ae442354afc9.png)
编译:语法分析,语义分析,汇总符号,代码优化,生成后缀名为".s"的文件;
![](https://i-blog.csdnimg.cn/blog_migrate/ec7fa4f313f23db1ecb3c0f95bab0e03.png)
汇编:将汇编指令翻译为二进制,生成符号表,生成各种段。然后生成可重定位的二进制目标文件(".o"/".obj");
![](https://i-blog.csdnimg.cn/blog_migrate/22f94eb2ff2d43f822969f70c8ce60f3.png)
链接:合并各个section,调整段大小以及起始位置,合并符号表,符号解析,符号重定位,然后生成可执行文件(".out"这里没有给后缀名,windows下为".exe");
![](https://i-blog.csdnimg.cn/blog_migrate/075852b8373b8ae422dfc76946a6f112.png)
![](https://i-blog.csdnimg.cn/blog_migrate/17c0f691fe76c5f46b8a7219d5b1de05.png)
本次内容的介绍比较粗糙,没有具体分析生成的各个文件的部分,还需要在后续补充。