详见《gcc中文手册》

编译过程

    预处理器cpp    编译器gcc    汇编器as     链接器linker   

file.c   -------------> file.i  ------------->file.s ----------->file.o -------------->file.out

file.h                          libc.a

gcc选项概述
man gcc                 查看更多选项信息
gcc [options] [filename]
    -x language
    -c                    只对文件进行编译和汇编,不链接
    -S                    只对文件进行编译,不汇编和链接
    -E                    只对文件进行预处理
    -o [file] file2     
    -lname  (小写L)用来指定所使用的库文件  例:-lm 使用libm.a (m就是库的名称)

 -Idirname         将dirname所指出的目录加入到程序头文件目录列表中

                      例:gcc foo.c -I /home/include -o foo                     
    -Ldirname       将dirname所指出的目录加到库文件的目录列表中。

                      例:gcc foo.c -L /home/lib -lfoo -o foo

  -static      静态链接(将库的内容加入程序中,形成完整的可执行程序)
    -w                    禁止生成警告信息
    -Wall                显示附加的警告信息

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

                      例:gcc -DDEBUG hello.c -o hello

                        gcc -DNUM=2 hello.c -o hello

  -pedantic         严格要求符合ANSI标准
    -g                     添加调试信息
    -p                     产生prof所需的信息
    -pg                    产生gpof所使用的信息
    -O(-O1)             对编译出的代码进行优化
    -O2                 进行比-O高一级的优化
    -O3                 产生更高级别的优化
    -v                  
    -m***                根据不同的微处理器进行优化

详解:
    gcc -c test.c                生成.o文件
    gcc -S test.c                生成汇编文件.s
    gcc -E test.c -o test.i     生成.i
    gcc -V 2.6.3 -v              强制执行2.6.3版本
    gcc -m486                     使用对486的相应优化效果

gcc -Wall -o test test.c

gcc -g -Wall -o test3_1 test3_1.c
    gcc -ggdb3 -Wall -o test3_1 test3_1.c     -ggdb3使用最高级别的调试信息

高级gcc选项
    1.管理大型项目(多模块的编译)
        gcc -Wall -c -o test3_1 test3_1.c
        gcc -Wall -c -o test3_2 test3_2.c
        gcc -Wall -c -o test3_3 test3_3.C
        gcc -o test test3_1.o test3_2.o test3_3.o
    2.指定查找路径 (-I -L)
        gcc -Wall -I/usr/include/zw -o test test.c
        gcc -Wall -L/usr/X11R6/lib -Wall -o test test.c -IX11
    3.链接库(-l) l链接的库可以是静态的也可以是共享的。

  gcc -o test test3a.o test3b.o test3.o -lm
        
    4.使用管道(使管道前的输出成为管道后的输入,可以同时调用多个程序) ?
        gcc -pipe -Wall -O3 -o test test.c  
        
Gcc编译流程
    C预处理    (C预处理器cpp)
    Gcc     (gcc)
    汇编     (as)
    文件处理建立静态库    (ar)
    GUN链接    (ld)
    
    辅助:
    库显示    (ldd)

/*************************
此程序设计的性能很低。用于比较优化前后的性能 导致程序低效的原因:
for循环的结束值及步长每次都要重新计算
five变量没有必要每次循环都为它分配值,只要在循环前做一次赋值即可 **************************/ #include <stdio.h> int main(void)
{
int counter;
int ending;
int temp;
int five;
for(counter=0;counter<2*100000000*9/18+5131;counter+=(5-3)/2)
{
temp=counter/15302;
ending=counter;
five=5;
}
printf("five=%d;ending=%d\n;temp=%d",five,ending,temp);
return 0;
}

带优化与不带优化的编译差别

//test3_2.c 程序优化
gcc -Wall -o test3_2 test3_2.c
time ./test3_2 //查看程序运行时间 gcc -Wall -O1 -o test3_2pro test3_2.c
time ./test3_2pro

GCC编译器的更多相关文章

  1. 在CentOS 7.2下升级gcc编译器的版本

    默认情况下,CentOS 7.2预装的gcc版本是4.8.x,通过执行命令 gcc -v 可以看到,一般情况下这个版本的编译器已经满足需要了,但是某些特殊的时候为了支持C++更高的特性,需要对gcc编 ...

  2. C语言的编译过程、安装gcc编译器以及设置环境变量

    以我对C语言编译过程的了解,我用了一点时间画了一个图,提供给大家参考一下,希望有些能对您的问题提上帮助. 前几天刚初步学习了C语言的编译过程,感触挺深的.在C语言中头文件其实起了一个很大的作用. 1. ...

  3. 利用GCC编译器生成动态链接库和静态链接库

    转载请标明:http://www.cnblogs.com/winifred-tang94/ 1.编译过程 gcc –fPIC –c xxx.c 其中-fPIC是通知gcc编译器产生位置独立的目标代码. ...

  4. GCC编译器编译链接

    在gcc编译器环境下,常见的文件扩展名的含义如下: .c:C源程序,经过预编译后的源程序也为.c文件,它可以通过-E参数输出. .h:头文件 .s:经过编译得到的汇编程序代码,它可以通过-S参数输出. ...

  5. Linux安装gcc编译器详解

    本人使用的是CentOS 6.5 64位系统,由于在安装系统的时候并没有勾选安装gcc编译器,因此需要自行安装gcc编译器. 使用yum安装gcc 对于配备了yum的Linux发行版而言,安装gcc编 ...

  6. GCC编译器使用

    一.GCC简介 通常所说的GCC是GUN Compiler Collection的简称,除了编译程序之外,它还含其他相关工具,所以它能把易于人类使用的高级语言编写的源代码构建成计算机能够直接执行的二进 ...

  7. GCC编译器和GDB调试器常用选项

    http://blog.csdn.net/u014328976/article/details/46745349 GCC编译器 gcc hello.c -o hello                 ...

  8. 临时改GCC编译器,重启后失效

    临时改GCC编译器,重启后失效.例如,用如下命令: export CROSS_COMPILE= <gcc 文件所在的目录>/arm-linux-gnueabihf- 本例中使用的命令如下: ...

  9. windows下安装,配置gcc编译器

    在Windows下使用gcc编译器: 1.首先介绍下MinGW MinGW是指仅仅用自由软件来生成纯粹的Win32可运行文件的编译环境,它是Minimalist GNU on Windows的略称. ...

  10. gcc编译器与基本类型3

    C语言发展史 1969年贝尔实验室 肯尼斯·蓝·汤普逊,丹尼斯·李奇开发了B语言 ->Unix,New B语言,改名C语言83年提出C语言标准 1989年十二月正式通过C语言标准,C89标准 C ...

随机推荐

  1. 宏定义#define和typedef的区别和典型范例题目辨析

    宏定义#define pStr char*  ,是直接把程序中出现pStr的地方替换成char* ,直接替换: typedef  char * pStr; 是给char*定义一个别名叫做 pStr; ...

  2. android 经典下雨效果

    英文原文地址:https://blog.stylingandroid.com/snowfall/ 中文翻译地址:http://www.open-open.com/lib/view/open145226 ...

  3. lightoj1027

    //Accepted 1688 KB 0 ms //概率简单题 //假设我们在n个门前加个起点,在n个门后加个终点,起点可以到达n个门, //为正的门可以到达终点,为负的回到起点 //则假设我们从起点 ...

  4. Ubuntu 14.10 下网络流量实时监控ifstat iftop命令详解

    ifstat 介绍 ifstat工具是个网络接口监测工具,比较简单看网络流量 实例 默认使用 #ifstat eth0 eth1 KB/s in KB/s out KB/s in KB/s out 0 ...

  5. bind,call,apply区别

     js中bind.call.apply函数的用法 2015-02-27 21:16:39 标签:javascript js bind call apply 原创作品,允许转载,转载时请务必以超链接形式 ...

  6. Wythoff's game

    这个问题就是OJ题里出现的取石子游戏,http://en.wikipedia.org/wiki/Wythoff%27s_game. 维基里面的通项公式并不适用于算法求解.需要理解下面两条规律: 1.A ...

  7. 50元制作PS2键盘无线监控装置

    0×00    什么是Arduino  Arduino实际上就是一种开发板,将微控制器和必需的元件集成在一块电路板上,扩展出完善的接口和针脚,就可以接上各种各样的传感器,完成你心中的设计,你也可以把它 ...

  8. 文件操作II

    <html> <head> <meta charset="utf-8"> </head> <body> <?php ...

  9. swift系统学习第二章

    第五节:可选类型 optional //: Playground - noun: a place where people can play import UIKit /* Swift学习第五节 可选 ...

  10. Android点击View显示PopupWindow,再次重复点击View关闭PopupWindow

     Android点击View显示PopupWindow,再次重复点击View关闭PopupWindow 这本身是一个看似很简单的问题,但是如果设置不当,就可能导致莫名其妙失效问题.通常在Andro ...