Bootstrap

编译器工作过程简介

编译器

	负责把人能看得懂的记录了代码的文本文件,翻译成计算机能看懂的二进制文件,有预处理器、编译器、链接器
	
	gcc 是由GNU组织为了编译Linux内核代码而开发的一款免费开源的编译器,默认采用C89标准,-std=gnu99可以设置语法标准
	
    常用参数:(区分大小写)
        -E      显示预处理的结果        会加入到 a.out 文件的头部
        -S      生成汇编代码        生成.s文件
        -c      只编译不链接        .o 目标文件 全都是二进制 链接完才能达成目标效果
        -o      设置编译结果的名字      一般设置同名.i文件
        -I      指定头文件的加载路径        优先度最高
        -l      指定要使用的库文件      -lm libm.so 数学库 就算头文件加了math.dio 不加-lm也无法使用数学函数     -lc已经默认加入
        -Wall   以更严格的编译标准来检查代码,尽可能多的显示警告        例:定义变量并没有使用会报warning
        -Werror 把警告当错误处理        warning->error

C代码变成可执行程序的过程

1、预处理   把源文件翻译成预处理文件
    gcc -E xxx.c    显示预处理结果,但是不生成任何文件
    gcc -E xxx.c -o xxx.i   生成以.i结尾的预处理文件
2、编译     把预处理文件翻译成汇编文件
    gcc -S xxx.i    生成以.s结尾的汇编文件
3、汇编     把得到的汇编文件翻译成二进制的目标文件
    gcc -c xxx.s    生成以.o结尾的目标文件
4、连接     把若干个目标文件合并成一个可执行文件
    gcc a
;