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. python -pickle模块、re模块学习

    pickel模块 import pickle #pickle可以将任何数据类型序列化,json只能列表字典字符串数字等简单的数据类型,复杂的不可以 #但是pickle只能在python中使用,json ...

  2. 「LibreOJ#516」DP 一般看规律

    首先对于序列上一点,它对答案的贡献只有与它的前驱和后驱(前提颜色相同)构成的点对, 于是想到用set维护每个颜色,修改操作就是将2个set暴力合并(小的向大的合并),每次插入时更新答案即可 颜色数要离 ...

  3. ActivityStream是什么?什么是Feed流?

    我先说说feed流吧,它就是社交网站中用户活动信息流,例如用户写了博客.发了照片.评论了什么等等.Facebook叫newsFeed.推特叫TimeLineFeed.ActivityStream是这些 ...

  4. C# static const和readonly区别

    Const 定义的是静态常在对象初始化的时候赋值.以后不能改变它的值.属于编译时常量. Static 定义的是静态变量.可以再外部改变它的值.. Readonly 是只读变量.属于运行时变量.可以在类 ...

  5. L009文件属性知识详解小节

    本堂课分为5部分内容 1.linux下重要目录详解 2.PATH变量路径内容 3.linux系统中文件类型介绍 4.linux系统中文件属性详细介绍 5.linux系统文件属性inode与block知 ...

  6. 获取已安装app的bundle id

    备注:以下是私有api 苹果审核会被拒绝. 导入头文件 #import <objc/runtime.h> /// 获取其他APP信息(iOS11无效) + (NSArray *)getOt ...

  7. Prolog奇怪奇妙的思考方式

    今天在<七周七语言>中接触到了prolog,发现它的编程模式和思考方式的确比较奇怪,但同时也非常奇妙,值得学习一下. 1. prolog语言介绍     和SQL一样,Prolog基于数据 ...

  8. C#里的指针

    最近在复习C#基础这里,发现指针运算方式跟引用类型运算方式很相像. 指针里面存放的是表示内存地址的一段整数,所以任何整数类型指针之间都可以相互转换,因此带来了不安全性. ; long* b = &am ...

  9. PHP将两个数组相加

    $arr_a=[1=>1,2=>2,3=>3];$arr_b=[1=>'a',4=>4];print_r($arr_a+$arr_b);返回结果:Array ( [1] ...

  10. java.sql.Date java.sql.Time java.sql.Timestamp 之比较

    java.sql.Date,java.sql.Time和java.sql.Timestamp 三个都是java.util.Date的子类(包装类). java.sql.Date是java.util.D ...