GCC编译C文件的原理
(1) 预处理
作用: 处理头文件展开 宏替换等动作 不会进行任何语法检查
指令如下:gcc 文件名.c -E -o 文件名.i
-E 只进行预处理操作
-o 重命名 输出文件名字
hello.i .i后缀 表示只进行预处理后的文件
(2) 编译 使用C编译工具 将预处理后的 C代码 编译为 汇编代码例如创建hello.c这个文件
gcc hello.i -S -o hello.s
-S 只进行 C编译为 汇编
.s 后缀 用于表示 汇编文件
该动作需要进行语法检查
(3) 汇编 使用汇编器 将汇编代码 编译为 二进制目标文件 不能单独运行
gcc hello.s -c -o hello.o
-c 仅进行 汇编, 生成 二进制目标文件
.o 表示 二进制目标文件
(4) 链接 将多个二进制目标文件 与库链接 生成可以执行的 二进制文件
gcc hello.o -o hello.out
gcc 中的其他的选项
-I 用于指定头文件的搜索路径
gcc hello.c -c -o hello.o -I./inc-l 用于指定 链接第三方库的名字
-L 用于指定 链接第三方库的路径
-O 用于指定 编译优化等级 -O0 不优化 -O1 -O2 -O3 volatile 防止编译器优化
-g 用于编译时 附加 调试数据 主要用于gdb调试
GCC组件: 有4个组成部件GCC组件: 有4个组成部件
编译器 : C ---> 汇编
汇编器 : 汇编---> 二进制机器码
链接器 : 链接多个二进制机器码 和 库 构成 可以运行的二进制程序
C库 : 一些有gcc提供的 常用的一些函数