在动态库和静态库建立的过程中发现自己对c语言程序编译过程有一些不了解,所以学习之后在这里与大家共同探讨以下;
在c程序编译过程之中会有预处理,编译,汇编,链接
我们分别来看一下他们的作用是什么
1.预处理:
1.首先它会将所有的#define删除并且展开所有的宏
2.处理所有的条件预编译指令如:#if #endif等
3.删除所有的注释,并且标记行号与文件的标示,
4.但是其会保留#pragma
预处命令是:gcc -E hello.c hello.i
我们用hello.c文件来看一下这是.c文件
预编译之后是如图
我们可以看到前边添加了800多行的代码,其就是预处理时将运行代码所需要的定义等都放到该文件上
2.编译
这个过程时就是将预处理后的代码通过一系列的语法分析,词法分析,语义分析等过程,将该文件译为汇编代码
命令是:gcc -S hello.i -o hello.s
预处理和编译之后的代码如下图
我们可以看到预处理后的代码已经被编译为汇编代码
3.汇编
这个过程就是将汇编代码翻译为计算机可以直接识别的机器语言
命令:gcc -c hello.s -o hello.o
汇编之后的代码如图
我们可以看到代码已经变为了二进制代码
4.链接
通过调用链接器ld来调用文件所需要的库文件和目标文件生成可执行的文件
通过链接之后的文件即是我们最后的可执行文件。