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

    

  

  

   

    

010GCC程序编译的更多相关文章

  1. 代码中,使用__DATE__宏,获取程序编译时间,如何保证每次编译代码(非重新生成方式),都能更新__DATE__的值?

    代码中,使用__DATE__宏,获取程序编译时间,如何保证每次编译代码(非重新生成方式),都能更新__DATE__的值? 解决:通过vs的预先生成命令中,添加批处理命令,删除对应的obj文件方式,强制 ...

  2. 简述 C、C++程序编译的内存分配情况【转】

    面试题 9:简述 C.C++程序编译的内存分配情况  C.C++中内存分配方式可以分为三种:  (1)从静态存储区域分配:  内存在程序编译时就已经分配好,这块内存在程序的整个运行期间都存在.速度快. ...

  3. C程序编译过程浅析

    前几天看了<程序员的自我修养——链接.装载与库>中的第二章“编译和链接”,主要根据其中的内容简单总结一下C程序编译的过程吧. 我现在一般都是用gcc,所以自然以GCC编译hellworld ...

  4. Java程序编译和运行的过程

    Java整个编译以及运行的过程相当繁琐,本文通过一个简单的程序来简单的说明整个流程. 如下图,Java程序从源文件创建到程序运行要经过两大步骤:1.源文件由编译器编译成字节码(ByteCode)  2 ...

  5. Java程序编译和运行的过程【转】

    转自:http://www.360doc.com/content/14/0218/23/9440338_353675002.shtml Java整个编译以及运行的过程相当繁琐,本文通过一个简单的程序来 ...

  6. .NET概念:.NET程序编译和运行

    .NET概念:.NET程序编译和运行 分类: c#程序设计 2012-02-29 15:46 3001人阅读 评论(2) 收藏 举报 .net编译器语言microsoftassemblyvb.net ...

  7. 李洪强漫谈iOS开发[C语言-004]-开发概述程序设计语言程序编译过程

    汇编语言 指令用特定的名字来标记,这就是汇编语言 人比较容易看懂汇编语言 汇编直接和程序一一对应的 有汇编器把程序翻译成机器码 把高级语言编译成计算机识别的语言 程序编译过程 命令行 UNIX 系统中 ...

  8. .NET程序编译和运行

    一次面试的时候遇到的一道题目,简要说明.NET的编译过程,在网上看了很多资料,简单总结如下: 1.一般的编译过程 通常高级语言的程序编译过程是:首先写好的程序是源代码,然后编译器编译为本地机器语言,最 ...

  9. (二)一个工作任务引起的乱战——C++程序编译为dll,让C#调用

    C++程序编译为C#可调用的dll的过程: 1.新建一个Win32 Console Application 项目,项目名为:DLLDemo,下一步选择Application type为DLL; 2.在 ...

随机推荐

  1. php 获取时间今天明天昨天时间戳

    <?php echo "今天:".date("Y-m-d")."<br>";      echo "昨天:&qu ...

  2. 检测是否安装有sim卡

    ios7测试ok [CTSIMSupportGetSIMStatus() isEqualToString:kCTSIMSupportSIMStatusNotInserted]可以判断是否插入了sim卡 ...

  3. ruby 字符串学习笔记1

    1 从一种数据结构中构件字符串 hash = { key1: "val1", key2: "val2" } string = "" hash ...

  4. 第2章 Posix IPC

    2.1 概述 Poxix IPC包含:Posix消息队列.Posix信号量.Posix共享内存 2.2 IPC名字 Posix 消息队列.Posix信号量.Posix共享内存这三种Posix IPC都 ...

  5. ftime() 系统时间

    ftime() 函数,这个函数是取系统的时间,精确到毫秒级别,它在windows 和linux 下都可用.所以我暂时是比较喜欢它的. 这个函数返回一个结构体,结构体中两个成员,其中time 成员,与函 ...

  6. java小程序实例 闰年

    判断闰年. package com.test; import java.util.Scanner; import org.junit.Test; public class TestRunNian { ...

  7. struts (七) 域模型

    1.域模型获取参数 domain Model 2. vo  value object  值对象 do  data object 数据对象 dto data transfer object  数据传输对 ...

  8. bootstrap 中是通过写less文件来生成css文件,用什么工具来编写呢?

    bootstrap 中是通过写less文件来生成css文件,用什么工具来编写呢? 如果用sublime的话如何实现代码保存后浏览器刷新成最新的代码样式? 或者有什么其他好用的工具? 从网上找了很多方法 ...

  9. IDEA的查询引用、调用关系图的功能

    Eclipse的"Call Hierarchy"可以查看一个Java方法或类成员变量的调用树(caller和callee两个方向),非常方便. 在IDEA中类似功能被划分到了三个命 ...

  10. (easy)LeetCode 225.Implement Stack using Queues

    Implement the following operations of a stack using queues. push(x) -- Push element x onto stack. po ...