编译器工作过程简介

编译器

	负责把人能看得懂的记录了代码的文本文件,翻译成计算机能看懂的二进制文件,有预处理器、编译器、链接器
	
	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.o b.o c.o ...     默认生成一个文件名是a.out 的可执行文件

C语言的文件类型:

    .h      头文件
    .h.gch  头文件的编译结果,在同一文件中同时存在头文件和头文件的编译结果,会优先使用编译结果
    .c      源文件
    .i      预处理文件
    .s      汇编文件
    .o      目标文件
    .a      静态库文件
    .so     共享库文件

版权声明:本文为Glanic原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。