gcc编译c语言

时间:2020-12-29 02:24:31

摘自《Linux程序设计》第四版,人民邮电出版社

c语言程序的编译与调试
<<使用gcc编译,gdb调试>>


程序编译过程:
词法分析-->语法分析-->中间代码生成-->代码优化-->目标代码生成
gcc编译器:
预处理(preprocessing)-->编译(compilation)-->汇编(assembly)-->连接(link)

文件后缀名说明:
.c:c语言代码
.a:由目标文件构成的库文件
.C,.cc,.cpp:C++代码
.h:程序所包含的头文件
.i:已经预处理过c源文件,一般为中间代码文件
.ii:经过预处理过的C++源文件
.o:编译后的目标文件,源文件生成的中间目标文件
.s:汇编语言的源代码
.S:经过与编译汇编源代码
.O:编译以后的程序目标文件,目标文件经过连接成的执行文件


gcc:编译程序
    -o:指定编译输出文件(默认输出到当前文件夹a.out)    
        gcc a.c -o test.out
    -v:查看程序编译过程和显示已经调用的库
        gcc -v a.c
    -x:指定编译语言(用在编译器不能识别的扩展名)
        gcc -x 'c' a.u
    -asci:指定编译程序使用ansic标准
    -E:只进行完预编译(.cxx)
    -S:只进行到生成汇编文件(.s)
    -c:只生成目录代码,不生成可执行程序(.o)
    
    -g:使用gdb调试程序,配合-o输出xxx.debug文件

编译过程控制:
              -E            -S          -c
    源文件--->预处理文件--->汇编文件--->目标文件--->可执行文件

gdb:调试程序
    gdb:启动调试环境
        file xxx.debug:加载调试文件
        list n:从n开始显示十行
        break n:在n行添加断点
        info breakpoint [n]:查看程序中设置的断点/查看n个断点
        next:程序运行到下一行停下
        continue:程序会运行到下一个断点停下
        step:一行一行运行(同next),只是step可以到调用函数内部
        print:输出变量当前值                                    
    delete n:删除n个断点
    q:退出环境