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. Hive(1)-基本概念

    一. 什么是Hive Hive:由Facebook开源用于解决海量结构化日志的数据统计. Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能. 本 ...

  2. Hadoop(9)-HDFS的NameNode和SecondaryNameNode详解

    1.NN和2NN工作机制 首先,我们做个假设,如果存储在NameNode节点的磁盘中,因为经常需要进行随机访问,还有响应客户请求,必然是效率过低.因此,元数据需要存放在内存中.但如果只存在内存中,一旦 ...

  3. pygame小游戏之坦克大战

    以前在学校的时候无聊的学了会pygame.看了大概一周的教学视频,做出来个坦克大战的小游戏 Python3.5  pycharm import pygame,sys,time from random ...

  4. Logistic Regression学习笔记

    1.李航<统计学习方法>: 2.https://blog.csdn.net/laobai1015/article/details/78113214 3.http://www.cnblogs ...

  5. GIT LFS 使用笔记

    一.背景 由于git上传文件大小受限,所以我们需要使用GIT LFS对大小超过一定上限的大文件进行处理. 二.安装 linux上安装参见 https://askubuntu.com/questions ...

  6. 2018徐州网络赛H. Ryuji doesn't want to study

    题目链接: https://nanti.jisuanke.com/t/31458 题解: 建立两个树状数组,第一个是,a[1]*n+a[2]*(n-1)....+a[n]*1;第二个是正常的a[1], ...

  7. linux execl()函数

    关于execl()函数族的用法不在赘述,其他博主介绍的很详细.下面说下作者在使用该函数时所犯的错误: 作者想通过使用execl()函数在子进程中调用其他函数,起初楼主是 这样用的: if((a = e ...

  8. 3,jieba gensim 最好别分家之最简单的相似度实现

    简单的问答已经实现了,那么问题也跟着出现了,我不能确定问题一定是"你叫什么名字",也有可能是"你是谁","你叫啥"之类的,这就引出了人工智能 ...

  9. Python的文件输入输出,如何追加内容,读取内容,添加内容

    python主要的文件打开的几种访问模式 模式可以为读模式('r').写模式('w')或追加模式('a'),当然还有rb.wb.ab.r+.w+.a+.rb+.wb+.ab+,然而实际从代码上我也没看 ...

  10. 2016弱校联盟十一专场10.3 We don't wanna work!

    能把 not working now 写成 not working hard now 还查一晚上也是没谁了 我的做法是维护两个set 分别是前20% 和后80% #include<iostrea ...