C语言的编译:编译、汇编。
源代码(.c)->编译器->汇编代码(.os)->汇编器->目标代码(.o)->链接器->可执行程序。
编译 :文本形式源代码翻译为机器语言形式的目标文件的过程。
链接:把目标文件、操作系统的启动代码和用到的库文件进行组织形成最终生成可加载、可执行代码的过程。
.h与.c文件的关系像是书籍目录与对应内容关系:一般.h里面是声明,.c里面是具体实现。可以将.c文件编译为.obj或者是.lib文件分享给他人调用而不暴漏源代码。
.i文件:根据#开头的命令对源程序修改,即宏替换后的文件
.lib文件: 静态数据链接库,起链接程序的作用。
.obj文件: 二进制目标文件,与系统库函数连接为.exe可执行文件
.s文件:编译器处理过的源代码文件,包含发送给处理器的汇编指令
.o文件:即对象文件,为可执行文件。包含对各个函数入口的标记,描述。当函数要执行时经过链接器把多个.o文件链成一个可执行文件。
名词 | 作用 | gcc命令 | 对应命令 |
---|---|---|---|
预处理器 | 将.c文件转化成.i文件 | gcc -E | cpp |
编译器 | 将.c/.h文件转换成.s文件 | gcc -S | cc -S |
汇编器 | 将.s文件转成.o文件 | gcc -c | as |
链接器 | 将.o文件转化为可执行程序 | gcc | ld |
加载器 | 将可执行程序加载到内存并进行执行loader(加载器)和ld-linux.so(动态连接器) |