By francis_hao    Feb 13,2017

概要

这里只列出了最常用的选项

 

选项解释

-c|-S|-E

启动gcc编译器时,它会顺序执行预处理、编译、汇编和连接(四个阶段的详细介绍见【参考1】)。这几个选项可以指定gcc停止位置。

-c    程序不执行连接阶段,生成.o目标文件

-S    程序不执行汇编阶段,生成汇编格式.s的文件(编译阶段即将源文件编译成汇编格式文件)

-E    程序不执行编译阶段,生成预处理过的源文件

-std=standard

指定语言标准,目前只支持c和c++。

standard可能的取值如下

c89

iso9899:1990

iso9899:199409

c99

c9x

iso9899:1999

iso9899:199x

gnu89 (This is the default for C code)

gnu99

gnu9x

其中-std=c89和-ansi在c语言中等价,-std=c++98和-ansi在c++中等价

-g

产生调试信息,以便GDB调试

-pg

生成额外的程序,用于记录程序运行的相关信息,以便为分析程序gprof使用。gprof见【参考2】。需要注意的是,你必须在编译你想生成运行信息的程序的源文件时使用该选项,同时在连接时也要使用该选项

-Olevel

优化等级,分别有O0、O1、O2、O3和Os五个等级。其中默认的优化等级是O0,推荐的优化等级是O2。更详细的信息见man手册

-Wwarn...

-Wall        打开所有的警告

-Werror        将警告以错误来处理

-pedantic

对所有不符合ISO C和ISO C++标准的代码发出警告

-Idir...

将dir添加到搜索头文件的目录列表中,-I指定的目录优先于标准的系统头文件目录。如果dir以"="开始,"="会被sysroot前缀替换掉。see --sysroot and -isysroot

-llibrary

连接时搜索library库,需要注意的是,连接时会按照其出现的顺序来进行,需要注意库之间的依赖关系。搜索时实际搜索的名字是liblibrary.a

-Ldir...

为-l添加搜索路径

-Dmacro[=defn]...

有两种形式

-Dmacro:等同于#define macro 1

-Dmacro=defn:等同于#define macro defn

-Umacro

取消之前的macro的宏定义,不管是程序里的还是-D指定的

-mmachine-option...

-f和-m很少用到,-m可能的用法如下:

-mcpu=cpu -mtext=text-section -mdata=data-section -mrodata=readonly-data-section

-o outfile

将输出文件指定为outfile,outfile可能是可执行文件、汇编文件或与处理过的源文件。如果-o没有被指定,默认输出的可执行文件为a.out,如果源文件为source.suffix,那么默认的目标文件名是source.o,汇编文件名是source.s

@file

从文件file中读取选项,文件种的选项以空格分隔。(几乎用不上)

infile...

正如其字面意思,输入文件,可以有多个

 

共享库

与动态共享库相关的选项如下

-shared

产生一个共享的库文件,使用该选项时,为产生可预测的结果,最好在产生代码时指定选项-fpic或-fPIC(在编译源文件到目标文件(.o或.so)时必须指定该选项)

-fpic

产生位置独立的代码(Generate position-independent code,PIC),代码通过全局的偏移表(global offset table,GOT)获取固定地址,动态加载器负责解析GOT。如果GOT的大小超过限制,在连接时会出现错误提示,此时需要使用-fPIC

此标志被设置时, 宏 "__pic__" 和 "__PIC__" 定义成1。

-fPIC

类似-fpic,但是没有GOT大小的限制。

此标志被设置时, 宏 "__pic__" 和 "__PIC__" 定义成2

 

其他常用选项

选项

含义

-print-file-name=library

打印会在链接时使用的库文件library的全路径

-print-search-dirs

打印gcc安装路径和gcc会搜索库文件的路径

 

 


本文由 刘英皓 创作,采用 知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆 许可协议进行许可。欢迎转载,请注明出处:
转载自:http://www.cnblogs.com/yinghao1991/p/6395255.html

 

 

参考

【1】Randal E.Bryant David R.O'Hallaron著 龚奕利 雷迎春 译 《深入理解计算机系统》北京:机械工业出版社,2011

【2】CSDN http://blog.csdn.net/stanjiang2010/article/details/5655143 Linux性能评测工具—gprog篇

【3】迟思堂工作室 http://www.latelee.org/programming-under-linux/library-on-linux.html Linux平台静态库、动态库的一些笔记

gcc用法小记的更多相关文章

  1. [转]HttpClient的超时用法小记

    HttpClient的超时用法小记 HttpClient在使用中有两个超时时间,是一直接触和使用的,由于上次工作中使用httpClient造成了系统悲剧的情况,特地对它的两个超时时间进行了小小的测试, ...

  2. Matlab norm 用法小记

    Matlab norm 用法小记 matlab norm (a) 用法以及实例 norm(A,p)当A是向量时norm(A,p)   Returns sum(abs(A).^p)^(1/p), for ...

  3. linux expect, spawn用法小记

    linux expect, spawn用法小记_IT民工_百度空间 linux expect, spawn用法小记 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://sys ...

  4. [转载]expect spawn、linux expect 用法小记

    原文地址:expect spawn.linux expect 用法小记作者:悟世 使用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄.收藏.可是为什么要这么写 ...

  5. Shell常见用法小记

    shell的简单使用 最近发现shell脚本在平常工作中简直算一把瑞士军刀,很多场景下用shell脚本能实现常用的简单需求,而之前都没怎么学习过shell,就趁机把shell相关的语法和常见用法总结了 ...

  6. Linq用法小记

    一.什么是Linq? LINQ即Language Integrated Query(语言集成查询),LINQ是集成到C#和Visual Basic.NET这些语言中用于提供查询数据能力的一个新特性. ...

  7. ss命令用法小记

    By francis_hao    Nov 4,2017   ss是一个查看socket的实用工具 概要 ss [options] [ FILTER ]   描述 ss可以查看socket的统计信息, ...

  8. printf函数用法小记

    By francis_hao    Aug 26,2017   C语言中printf函数是一个比较常用的函数,但是常用并不代表完全了解,本文翻译了printf的man手册,介绍了其全部功能(不包括ma ...

  9. nc用法小记

    By francis_hao    Jun 30,2017   ncat:连接和重定向套接字 概要 ncat [OPTIONS...] [hostname] [port]   描述 ncat 是一个集 ...

随机推荐

  1. 神级编辑器 sublime text 和 神级插件 emmet

    h1{foo}和a[href=#] 生成如下代码 <h1>foo</h1>  <a href="#"></a> 嵌套的使用 > ...

  2. Python学习:If 语句与 While 语句

    If 语句 用以检查条件:如果条件为真(True),将运行这一块的语句(称作 if-block 或 if 块)    则将运行另一块语句(称作 else-block 或 else 块),其中 else ...

  3. LOOP AT SCREEN

    用法 主に.画面の属性を変更させるために使用する. 照会モードでは入力不可とするが入力可能モードでは入力可能とする.ラジオボタンAが選択された場合はラジオボタンBに関連する項目は非表示とするなど.   ...

  4. Centos7下lamp环境搭建的小笔记

    刚刚把校赛弄完,赛前在环境搭建上花了蛮多时间,也正好记一下笔记 0.首先更新源 清华大学开源镜像站的源 https://mirrors.tuna.tsinghua.edu.cn/help/centos ...

  5. Python字符串处理:过滤字符串中的英文与符号,保留汉字

    使用Python 的re模块,re模块提供了re.sub用于替换字符串中的匹配项. re.sub(pattern, repl, string, count=0) 参数说明: pattern:正则重的模 ...

  6. 深度分析如何在Hadoop中控制Map的数量(摘抄)

    很多文档中描述,Mapper的数量在默认情况下不可直接控制干预,因为Mapper的数量由输入的大小和个数决定.在默认情况下,最终input占据了多少block,就应该启动多少个Mapper.如果输入的 ...

  7. 【廖雪峰老师python教程】——错误和调试

    错误处理 try...except...finally...机制 try: print('try...') r = 10 / 0 print('result:', r) except ZeroDivi ...

  8. tomcat 异常

    Removing obsolete files from server... Could not clean server of obsolete files: null java.lang.Null ...

  9. LR创建数据源读取excel

    1 在window上创建数据源   2 创建对应的数据文件 excel 注:注意格式和底部的表单名称 3 Vegen中创建参数 注意:机器数据源选择windows的ODBC数据源 SQL查的是(she ...

  10. 对SE的认识

    对SE的认识 简述 “架构师”,也就是SE,总是给外人一种比较牛逼的感觉,其实踏实做开发的真的很少关注这个title. 抛开这个名词,这个角色的存在的确有一定的意义,因为项目中需要一个能“带领大家前进 ...