我的家乡湛江网站设计,烟台网站建设招聘,绑定网站域名怎么做,泌阳专业网站建设前言如果你使用集成环境开发。那么你点击编译按钮就可生成可执行文件。但是C程序从源代码到二进制行程序都经历了那些过程#xff1f;你知道吗#xff1f;这些过程集成开发环境在点击编译按钮后都做完了#xff0c;如果编译没有出错#xff0c;即可生成可执行文件。本文将以…前言如果你使用集成环境开发。那么你点击编译按钮就可生成可执行文件。但是C程序从源代码到二进制行程序都经历了那些过程你知道吗这些过程集成开发环境在点击编译按钮后都做完了如果编译没有出错即可生成可执行文件。本文将以Linux下C语言的编译过程为例。对编译过程进行讨论。编译一个C程序代码下面以Linux环境下的test.c为例test.c里的代码为#include stdio.hint main(int argc, char const *argv[])
{printf(hello 程序猿编码n);return 0;
}编译输出这个过程如此熟悉以至于觉得编译是一件很简单的事。事实真的如此吗我们来细看一下C语言的编译过程到底是怎样的。GCC编译过程图片来源于GCC和Make编译链接和构建C/C 应用程序上述gcc命令其实依次执行了四步操作1.预处理(Preprocessing)2.编译(Compilation),3.汇编(Assemble),4.链接(Linking)。预处理以“#”号开头的预处理指令如包含#include,宏定义制定#define等。在源程序中这些指令都放在函数之外而且一般放在源文件的前面。使用预处理器把源文件test.c经过预处理生成test.i文件。预处理的命令为gcc -E test.c -o test.i
上述命令中-E是让编译器在预处理之后就退出不进行后续编译过程-o是指定输出文件名。在本例中预处理结果就是将stdio.h 文件中的内容插入到test.c中了。预处理生成的是test.i的文本文件这个文本文件是可以直接通过cat命令进行文本文件查看的。对比预处理、文本文件、可执行文件的大小经过预处理之后代码体积会大很多相当于可执行文件一倍大小。预处理之后的程序还是文本可以用文本编辑器打开。编译这里的编译不是指程序从源文件到二进制程序的全部过程而是指将经过预处理文件test.i之后的程序转换成特定汇编test.s代码的过程。编译的命令为gcc -S test.i -o test.s
上述命令中-S让编译器在编译之后停止不进行后续过程-o是指定输出文件名。编译过程完成后将生成程序的汇编代码test.s这也是文本文件。查看汇编代码和代码大小编译成汇编文件大小已经非常小了没有像预处理的时候文件大小这么臃肿。cat test.s里面汇编是什么意思就不要问我了。哈哈~汇编汇编过程将上一步的汇编代码转换成机器码这一步产生的文件叫做目标文件是二进制格式。编译的命令为gcc -c test.s -o test.o
部分内容截图如下链接链接过程使用链接器将该目标文件与其他目标文件、库文件、启动文件等链接起来生成可执行文件。附加的目标文件包括静态连接库和动态连接库。链接过程的命令为gcc test.o -o test
总结生成可执行程序过程为成四个步骤1、由.c文件到.i文件这个过程叫预处理。2、由.i文件到.s文件这个过程叫编译。3、由.s文件到.o文件这个过程叫汇编。4、由.o文件到可执行文件这个过程叫链接。欢迎关注微信公众号“程序猿编码” 这里Linux c/c 、Python、Go语言、数据结构与算法、网络编程相关知识常用的程序员工具。每日00:10之前更新新闻简报一份简报纵览天下事