转自http://www.cnblogs.com/lidan/archive/2011/05/25/2239517.html

[介绍]

gcc and g++分别是gnu的c & c++编译器   
gcc/g++在执行编译工作的时候,总共需要4步   
1.预处理,生成.i的文件

预处理器cpp
2.将预处理后的文件不转换成汇编语言,生成文件.s

编译器egcs
3.有汇编变为目标代码(机器代码)生成.o的文件

汇编器as
4.连接目标代码,生成可执行程序

连接器ld

1.总体选项

-E   
只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里   
面.   
例子用法:   
gcc -E hello.c > pianoapan.txt   
gcc -E hello.c | more   
慢慢看吧,一个hello word 也要与处理成800行的代码      
    -S   
只激活预处理和编译,就是指把文件编译成为汇编代码。   
例子用法   
gcc -S hello.c   
他将生成.s的汇编代码,你可以用文本编辑器察看     
    -c    
只激活预处理,编译,和汇编,也就是他只把程序做成obj文件   
例子用法:   
gcc -c hello.c   
他将生成.o的obj文件

2.目录选项

-Idir   
在你是用#include"file"的时候,gcc/g++会先在当前目录查找你所制定的头  
文件,如果没有找到,他回到缺省的头文件目录找,如果使用-I制定了目录,他   
回先在你所制定的目录查找,然后再按常规的顺序去找.   
对于#include,gcc/g++会到-I制定的目录查找,查找不到,然后将到系   
统的缺省的头文件目录查找

-include file

-i

相当于“#include”
包含某个代码,简单来说,就是便以某个文件,需要另一个文件的时候,就可以   
用它设定,功能就相当于在代码中使用#include   
例子用法:   
gcc hello.c -include /root/pianopan.h   
    -I-   
就是取消前一个参数的功能,所以一般在-Idir之后使用   
   -idirafter dir   
在-I的目录里面查找失败,讲到这个目录里面查找.   
    -iprefix prefix   
    -iwithprefix dir   
一般一起使用,当-I的目录查找失败,会到prefix+dir下查找    
    -Ldir   
制定编译的时候,搜索库的路径。比如你自己的库,可以用它制定目录,不然   
编译器将只在标准库的目录找。这个dir就是目录的名称。  
    -llibrary    
制定编译的时候使用的库   
例子用法   
gcc -lcurses hello.c   
使用ncurses库编译程序

3.调试选项

-g   
只是编译器,在编译的时候,产生调试信息。   
    -gstabs   
此选项以stabs格式声称调试信息,但是不包括gdb调试信息.   
    -gstabs+   
此选项以stabs格式声称调试信息,并且包含仅供gdb使用的额外调试信息.   
    -ggdb    
此选项将尽可能的生成gdb的可以使用的调试信息.

-glevel

请求生成调试信息,同时用level指出需要多少信息,默认的level值是2

4.链接方式选项:

-static 此选项将禁止使用动态库。

优点:程序运行不依赖于其他库

缺点:文件比较大

-shared (-G) 此选项将尽量使用动态库,为默认选项

优点:生成文件比较小

缺点:运行时需要系统提供动态库

-symbolic 建立共享目标文件的时候,把引用绑定到全局符号上.

对所有无法解析的引用作出警告(除非用连接编辑选项 `-Xlinker -z -Xlinker defs'取代)。

注:只有部分系统支持该选项.

5.错误与告警选项

-Wall 一般使用该选项,允许发出GCC能够提供的所有有用的警告。也可以用-W{warning}来标记指定的警告。

-pedantic 允许发出ANSI/ISO C标准所列出的所有警告

-pedantic-errors 允许发出ANSI/ISO C标准所列出的错误

-werror 把所有警告转换为错误,以在警告发生时中止编译过程

-w 关闭所有警告,建议不要使用此项

6.预处理选项

-Dmacro   
相当于C语言中的#define macro   
    -Dmacro=defn   
相当于C语言中的#define macro=defn   
    -Umacro   
相当于C语言中的#undef macro   
    -undef   
取消对任何非标准宏的定义

7.其他选项

-o

制定目标名称,缺省的时候,gcc 编译出来的文件是a.out,很难听,如果你和我有同感,改掉它,哈哈

例子用法   
gcc -o hello.exe hello.c (哦,windows用习惯了)   
gcc -o hello.asm -S hello.c   
    -O0   
    -O1   
    -O2   
    -O3   
编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高

-fpic 编译器就生成位置无关目标码.适用于共享库(shared library).

-fPIC 编译器就输出位置无关目标码.适用于动态连接(dynamic linking),即使分支需要大范围转移.

-v 显示详细的编译、汇编、连接命令
    -pipe   
使用管道代替编译中临时文件,在使用非gnu汇编工具的时候,可能有些问题   
gcc -pipe -o hello.exe hello.c   
    -ansi   
关闭gnu c中与ansi c不兼容的特性,激活ansi c的专有特性(包括禁止一些asm inline typeof关键字,以及UNIX,vax等预处理宏,   
    -fno-asm   
此选项实现ansi选项的功能的一部分,它禁止将asm,inline和typeof用作关键字。   
    -fno-strict-prototype   
只对g++起作用,使用这个选项,g++将对不带参数的函数,都认为是没有显式的对参数的个数和类型说明,而不是没有参数.而gcc无论是否使用这个参数,都将对没有带参数的函数,认为城没有显式说明的类型   
    -fthis-is-varialble   
就是向传统c++看齐,可以使用this当一般变量使用.   
    -fcond-mismatch   
允许条件表达式的第二和第三参数类型不匹配,表达式的值将为void类型   
    -funsigned-char   
    -fno-signed-char   
    -fsigned-char   
    -fno-unsigned-char   
这四个参数是对char类型进行设置,决定将char类型设置成unsigned char(前   
两个参数)或者 signed char(后两个参数) 
    -imacros file   
将file文件的宏,扩展到gcc/g++的输入文件,宏定义本身并不出现在输入文件中       
    -nostdinc   
使编译器不再系统缺省的头文件目录里面找头文件,一般和-I联合使用,明确限定头文件的位置   
    -nostdin C++   
规定不在g++指定的标准路经中搜索,但仍在其他路径中搜索,.此选项在创建libg++库使用   
    -C   
在预处理的时候,不删除注释信息,一般和-E使用,有时候分析程序,用这个很方便的   
    -M   
生成文件关联的信息。包含目标文件所依赖的所有源代码你可以用gcc -M hello.c来测试一下,很简单。   
    -MM   
和上面的那个一样,但是它将忽略由#include造成的依赖关系。   
    -MD   
和-M相同,但是输出将导入到.d的文件里面   
    -MMD   
和-MM相同,但是输出将导入到.d的文件里面   
    -Wa,option   
此选项传递option给汇编程序;如果option中间有逗号,就将option分成多个选项,然后传递给会汇编程序   
    -Wl.option   
此选项传递option给连接程序;如果option中间有逗号,就将option分成多个选项,然后传递给会连接程序.

-x language filename

设定文件所使用的语言,使后缀名无效,对以后的多个有效.也就是根   
据约定C语言的后缀名称是.c的,而C++的后缀名是.C或者.cpp,如果   
你很个性,决定你的C代码文件的后缀名是.pig 哈哈,那你就要用这   
个参数,这个参数对他后面的文件名都起作用,除非到了下一个参数   
的使用。   
可以使用的参数吗有下面的这些   
`c’, `objective-c’, `c-header’, `c++’, `cpp-output’,    
`assembler’, and `assembler-with-cpp’.   
看到英文,应该可以理解的。   
例子用法:   
gcc -x c hello.pig   
    -x none filename   
关掉上一个选项,也就是让gcc根据文件名后缀,自动识别文件类型   
例子用法:   
gcc -x c hello.pig -x none hello2.c

g++参数介绍的更多相关文章

  1. G++ 参数介绍(转载)

    g++参数介绍 From: http://www.cnblogs.com/lidan/archive/2011/05/25/2239517.html gcc and g++分别是gnu的c & ...

  2. gcc g++ 参数介绍

    C和C++ 编译器是集成的.他们都要用四个步骤中的一个或多个处理输入文件: 预处理 (preprocessing),编译(compilation),汇编(assembly)和连接(linking).源 ...

  3. SQLMAP参数介绍

    转自:http://zhan.renren.com/bugpower?gid=3602888498044629629&checked=true SQLMAP参数介绍 sqlmap的使用方式:p ...

  4. Linux 之 编译器 gcc/g++参数详解

    2016年12月9日16:48:53 ----------------------------- 内容目录: [介绍] gcc and g++分别是gnu的c & c++编译器 gcc/g++ ...

  5. scons用户指南翻译(附gcc/g++参数详解)

    scons用户指南 翻译 http://blog.csdn.net/andyelvis/article/category/948141 官网文档 http://www.scons.org/docume ...

  6. Apache中 RewriteRule 规则参数介绍

    Apache中 RewriteRule 规则参数介绍 摘要: Apache模块 mod_rewrite 提供了一个基于正则表达式分析器的重写引擎来实时重写URL请求.它支持每个完整规则可以拥有不限数量 ...

  7. Linux 启动参数介绍

    Linux 启动参数介绍 取自2.6.18 kernel Documentation/i386/boot.txt 文件中介绍 vga= 这里的不是一个整数(在C语言表示法中,应是十进制,八进制或者十六 ...

  8. Xcopy参数介绍

    DOS批处理命令,永远是不朽的命令,不仅功能强大,同时,速度也是最快的!但是,很多新手学习计算机,都已经遗忘了本不该忘记的批处理命令. 我们不可数典忘祖,该学习的还是要学习,不该忘记的还是不能忘记,尤 ...

  9. Linux下查看某个进程打开的文件数-losf工具常用参数介绍

    Linux下查看某个进程打开的文件数-losf工具常用参数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在linux操作系统中,一切皆文件.通过文件不仅仅可以访问常规数据,还 ...

随机推荐

  1. (笔记)Linux下的ioctl()函数详解

    我这里说的ioctl函数是指驱动程序里的,因为我不知道还有没有别的场合用到了它,所以就规定了我们讨论的范围.写这篇文章是因为我前一阵子被ioctl给搞混了,这几天才弄明白它,于是在这里清理一下头脑. ...

  2. 求 pi 的近似值题型汇总

    (注:暂时先记录这些问题,后期会持续更新) 一.用格雷戈里公式计算π的近似值,精度要求:最后一项的绝对值小于0.00001 1,用while循环实现 int denominator,flag; dou ...

  3. Java如何设置线程的优先级?

    在Java编程中,如何设置线程的优先级? 以下示例如何使用setPriority()方法来设置线程的优先级. package com.yiibai; public class SettingPrior ...

  4. e612. Moving the Focus to the Next or Previous Focusable Component

    The methods to move the focus to the next or to the previous focusable component are Component.trans ...

  5. (转)关于RTP时间戳及多媒体通信同步的问题

    下载 多媒体通信同步方法,主要有时间戳同步法.同步标记法.多路复用同步法三种.下面主要讨论时间戳同步法,特别是 RTP 时间戳同步.内容包括 RTP 媒体间同步的实现,为什么需要 RTCP 的 NTP ...

  6. memcached -- 运行memcached

    Memcached 运行 Memcached命令的运行: $ /usr/local/memcached/bin/memcached -h 注意:如果使用自动安装, memcached 命令位于 /us ...

  7. MVC4小细节

    一: @model 指令 或者也叫  @model关键字   注释:@model指令以提供一个更干净简洁的方式来指明你想要在视图文件中引用强类型模型类 作用:让视图文件(cshtml)更易读易写;VS ...

  8. [原创] Keil uVision5 下载程序 add flash programming algorithm选项缺少需要的算法解决办法

    MDK开发环境从V4升级到V5后,支持包不再是集成到开发环境当中,而是封装在PACK中,需要自行安装,比较麻烦. 搭建MDK开发环境以及破解的方法,在前面的文章中有详细说明,这里不再赘述,有兴趣的可以 ...

  9. 近期全国各地联通线路无法访问OA的解决方案

    最近有多地区使用联通线路的用户无法访问easyradius控制台,即oa.ooofc.com,其主要的原因是由于联通的DNS解析错误,导致的 oa.ooofc.com的解析IP是115.239.252 ...

  10. 多目标线性规划求解方法及matlab实现

    转载: https://blog.csdn.net/wzl1997/article/details/79120323