gcc简介及编译过程

来源:互联网 发布:手机淘宝哪儿有一元抢 编辑:程序博客网 时间:2024/05/22 17:01
(1)编译器 gcc 简介  
        Linux系统下的 gcc(GNU C Compiler)是GNU推出的功能强大、性能优越的多
平台编译器,它是GNU的代表作品之一,gcc是可以在多种硬件平台上编译出可
执行文件的超级编译器,其执行效率比一般的编译器要高出20%-30%。编译器能
将C、C++语言源程序、汇编语言源程序和目标程序编译、链接成可执行文件如
果没有给出可执行文件的名字,gcc将生成一个默认名为a.out的可执行文件。
在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件,而gcc则通过后缀来区别输入文件的类型。                                 

(2)gcc 的编译过程
源文件(.c .h)-> 预处理->编译->汇编->(静态库,动态库)链接->可执行文件


预处理(Preprocessing):产生程序中的警告


            主要处理源文件中,以'#'开头的语句,如#include  #ifdef  #define等,该阶段会产生一个中间文件 (*.i)。
命令 gcc -E -o zmx.i zmx.c。


编译阶段(Compilation): 产生程序中的错误   

            预处理完成后,gcc首先检查代码的规范性,以及是否有语法错误等。检查无误后,开始把代码翻译成汇编语言。
命令:gcc -S -o zmx.s zmx.i 


        汇编阶段(Assembly):产生目标文件.o ,是不可执行的二进制文件


   在汇编阶段,将输入的汇编文件 *.s,转换成目标文件 *.o, *.o 已经是二进制文件,即 0 和 1的机器语言,但是,它不是可执行的二进制文件。
   命令:gcc -c -o zmx.o zmx.s 


链接阶段(Linking): 将各个函数生成的.o目标文件链接生成一个工程文件。
   前面的过程知识验证该函数的正确与否,只有在连接阶段,将各个函数联合起来。
            类如函数中只有一个函数且不是主函数,没有语法错误,预处理和编译都不会产生错误,因为都只是把他当作普通函数来处理,当执行到链接这一步时,将程序整合,必须要有程序的入口和出口,即主函数,所以此时会产生报错。


汇编之后,进入链接。在链接阶段,通过链接各种静态库和动态库,得到可执行文件。
            命令:gcc -o star zmx.o 

gcc 常见的用法
gcc -o 生成指定的输出文件
gcc -v 查询gcc版本信息
gcc -g 生成调试信息,gdb调试器可以利用该信息
gcc -I 指定额外的头文件搜索路径
gcc -L 指定额外的函数库搜索路径
gcc -static 静态链接库,默认都是动态链接库
gcc -w 不生成任何警告信息
gcc -Wall 生成所有警告信息

原创粉丝点击