详见《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. julia与python中的列表解析.jl

    julia与python中的列表解析.jl #=julia与python中的列表解析.jl 2016年3月16日 07:30:47 codegay julia是一门很年轻的科学计算语言 julia文档 ...

  2. (转)Android学习笔记---SQLite介绍,以及使用Sqlite,进行数据库的创建,完成数据添删改查的理解

    原文:http://blog.csdn.net/lidew521/article/details/8655229 1.SQLite介绍:最大特点是,无数据类型;除了可以使用文件或SharedPrefe ...

  3. GSM Sniffing入门之软件篇:GSMTAP抓取与SMS(Short Message Service)

    重点介绍如何利用50元左右的设备,抓包并还原SMS短信内容: ps:研究GSM Sniffing纯属个人兴趣,能抓SMS报文只是捡了个明文传输的漏子,切勿用于非法用途.就像sylvain说的,osmo ...

  4. CPP,MATLAB实现牛顿插值

    牛顿插值法的原理,在维基百科上不太全面,具体可以参考这篇文章.同样贴出,楼主作为初学者认为好理解的代码. function p=Newton1(x1,y,x2) %p为多项式估计出的插值 syms x ...

  5. mac上安装MySQL

    mysql 官网下载http://dev.mysql.com/downloads/mysql/ 注意安装mysql-5.5.17-osx10.6-x86_64.dmg这样安装方便设置系统安全权限后 点 ...

  6. How to install more voices to Windows Speech?

    !!!WARNING!!! This involves manual edits to your registry. If you mess it up, don't blame me. Do at ...

  7. 创建XML文档结构

    static void CreateXML(string outputPath) { XmlDocument _xmlDoc = new XmlDocument(); string _xmlNode ...

  8. magento安装以及搬家的注意事项

    如果你的空间可以用ssh的话,你可以在官网的wiki Moving Magento To Another Server 中看到较为详细的搬家过程. 无论你的服务器是linux系统还是windows系统 ...

  9. Magento在IE下登陆不了后台,在Firefox下正常

    目前的解决办法如下: 方法一,用FF登陆后台,在 System—Configuration-Web-Session Cookie management....timeout 改为:86400 方法二: ...

  10. CentOS 6.6 nginx install

    /************************************************************************* * CentOS 6.6 nginx instal ...