GCC 的使用及介绍

一、GCC介绍      

   Linux系统下的GCC是GNU推出的功能强大、性能优越的多平台编译器,它可以在多种硬件平台上编译处可执行程序的超级编译器,其执行效率比一般的编译器的效率要高20%~30%。

        Gcc编译器能将C、C++语言源程序、汇程式化序和目标程序编译、连接成可执行文件,如果没有给出可执行文件的名字,gcc将生成一个名为a.out的文件。在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件。

二、linux中对于一些源文件后缀指出的语言种类介绍和后期的操作    

         在linux系统上使用gcc编译器,必须先了解一些文件的格式及作用,就会知道每一步都是做什么的。

        .c        C源程序 ; 后期可以进行预处理,编译,汇编,链接

        .C       C++源程序;后期进行预处理、编译,汇编 ,链接

        .cc       C++源程序;后期进行预处理、编译,汇编 ,链接

        .cxx     C++源程序;后期进行预处理、编译,汇编 ,链接

         .m      objective-C源程序;后期进行编译,汇编 ,链接

          .i        预处理后的C文件;后期进行编译,汇编 ,链接

          .ii        预处理后的C++文件;后期进行编译,汇编 ,链接

          .s        经过编译后的汇编语言程序;汇编,链接

          .S      汇编语言的源程序;预处理,汇编,链接

          .h       预处理器文件;一般不会出现在命令行参数上,一般直接在源程序中使用#include

          .o      生成的目标程序;使用连接器最后生成可执行程序

          .a       归档文件,也就是将.o文件封装起来,执行一定的功能

           .so     动态链接库

        三、 GCC的一般的执行过程

                一般经过四个步骤:预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编(Assembly)和连接(Linking)。

            Gcc指令的一般格式为 Gcc[选项] 要编译的文件 [选项][目标文件]

        1、预处理阶段:

        目的:使include之中的内容编译进去,并且用-E命令作用是进行查看,Gcc的预处理过程结束后停止编译。

          使用常见的hello.c举例说明:

         gcc -E hello.c -o hello.i

        //-E:表示对于源文件只执行预处理的操作,其结果变为.i文件,-o表示后面指定预处理后的文件名

       2、编译阶段

        目的:使预处理后的.i文件生成.s的汇编代码,其中-S就是编译器阶段的标志,执行完结束。

         gcc -S hello.i -o hello.s 

        3、汇编阶段

        目的:使生成的汇编代码生成二进制代码,此时的.o文件已经是ELF文件的格式,不能直接的查看其内容,但是可以使用objdump -d * .o反汇编。生成汇编代码可以查看。

        gcc -c hello.s -o hello.o

        4、链接阶段

        在汇编结束后,就会进入链接阶段,这是最后一个步骤,此时函数库就很重要了。链接过程分为动态链接和静态链接。静态链接的文件是.a,而动态链接的形式是.so的形式。对于其具体的链接过程以后再详细介绍。

        gcc hello.o -o hello 

        最后一步,那就是对于生成的可执行程序执行了,使用"./程序名"就可以。

        ./hello

        总结:      

                gcc -E hello.c -o hello.i

                gcc -S hello.i -o hello.s

                gcc -c hello.s -o hello.o

                gcc hello.o -o hello

                ./hello

     注意:

(1)目标文件(.o)和可执行程序都是二进制的ELF文件,区别在于是否进行了动态/静态库的链接。

  (2)  对于ELF文件感兴趣的可以使用readelf 和objdump命令查看他们里面到底有什么。

  (3) 想要查看更多的关于gcc的有些使用方法及技巧,可以参开gcc 的五大手册,链接如下:

GNU GCC 手册 1

GNU GCC 手册 2

GNU GCC 手册 3

GNU GCC 手册 4

GNU GCC 手册 5 

(4)在Linux系统中,也可以直接的适应系统自带的帮助手册,使用gcc -v --help,更加详细的介绍了命令行参数的使用。

        

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值