• 010GCC程序编译


    1、GCC的特点:

      Gcc(GUN C Compiler)是GUN推出的功能强大、性能优越的多平台编译器,是GUN的代表作制衣。GCC可以在多种硬体平台上编译出可执行程序,其执行效率与一般的编译器相比平均效率要高20%~30%。效率体现在编译出的文件小,花费时间短。

    2、GCC基本使用方法:gcc [options] filenames

      options:编译器所需要的编译选项

      filenames:要编译的文件名

    3、Gcc编译流程:

      GCC编译器能将C/C++语言源程序、汇编程序形成可执行文件。真格形成过程可以被细分为四个阶段:

        -E   .c经过预处理形成.i   (预处理:将宏替换到程序代码中)

        -S   .i经过编译形成.s

        -c    .s经过汇编形成.o

        -o    .o经过链接形成可执行文件

    4、Gcc通过后缀来区别输入文件的类别:

      .c为后缀的文件:C语言源代码文件

      .a为后缀的文件:是由目标文件构成的库文件

      .C,.cc或.cxx为后缀的文件:是C++源代码文件

      .h为后缀的文件:头文件

      .o为后缀的文件:是编译后的目标文件

      .s为后缀的文件:是汇编预压源代码文件

    5、Gcc编译选项:

      -o output_filename:确定可执行文件的名称为output_filename。如果不给出这个选项,gcc就给出预设的可执行文件a.out;  

      -O,对程序进行优化编译、链接,采用这个选项,整个源代码会在编译、链接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译,链接的速度就相应地慢一些;

      -O2,比-O更好的优化编译、链接,但是,整个编译、链接过程会更慢;

      优化:比如在程序中定义了一个名字为i的变量,但是整个程序运行过程中并没有使用这个变量,造成空间浪费,程序在编译时就能够发现这个问题,将没有用的东西优化掉。加上优化选项,就会将没有用的东西去掉,就不会造成浪费了。

      统计程序的运行时间,可以用time命令,比如看hello的运行时间,执行的命令为:time ./hello

      

      

      优化后的:

      

         从两个图片的结果可以看出,优化并不影响程序的结果,但是效率更高!

      

      -c:不链接,编译器只是由输入的.c等源代码文件编译生成.o为后缀的中间文件;

      -g:产生调试工具(GNU的gdb)所需要的符号信息,要想对编译出的程序进行调试,就必加入这个选项;

      -I dirname:将dirname所指出的目录作为编译器寻找头文件的标准路径;

        C程序中的头文件包含两种情况:

          #include <A.h>

          #include "B.h"

          对于<>,gcc在系统预设的头文件目录(如/usr/include)中搜寻相应的文件;对于"",gcc在当前目录中搜寻头文件。-I选项的作用是告诉gcc,如果当前目录中没有找到需要的头文件,就到指定的dirname目录中去寻找。也可以直接在双引号中指明路径:#include "/usr/A.h"

        范例:gcc foo.c -I /home/include -o foo

        

        每一个编译器都有一个标准的寻找头文件的路径;

      编译错误与编译警告都是我们的程序设计中经常遇到的问题。编译错误一般是代码中出现语法错误,程序无法编译执行,必须修改;编译警告是编译器发现程序中不合理的地方(比如类型不匹配),建议最好修改,但不修改也可以编译执行。

      -Wall:生成所有警告信息

      -w:不生成任何警告信息

      -DMACRO:定义MACRO宏,等效于在程序中使用#define MACRO

        

      使用方法:gcc -DPRINT macro.c -o macro

        

      

      

       

        

  • 相关阅读:
    常遇问题及解决
    cs231笔记1
    scikit-learn模型参数保存和多分类策略(one vs one和one vs rest)
    练习1_scikit_learn自带数据集_sklearn和svm
    记一次连不上wifi网的处理
    剑指offer | 从1到n整数中1出现的次数 | 22
    剑指offer | 数组中出现次数超过一半的数字 | 21
    剑指offer | 不用加减乘除做加法 | 20
    剑指offer | 二进制中1的个数 | 19
    剑指offer | 链表中环的入口结点 | 18
  • 原文地址:https://www.cnblogs.com/mch0dm1n/p/5477626.html
Copyright © 2020-2023  润新知