gcc用法小记

By francis_hao Feb 13,2017

概要

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

gcc用法小记

选项解释

-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】](http://blog.csdn.net/stanjiang2010/article/details/5655143)。需要注意的是,你必须在编译你想生成运行信息的程序的源文件时使用该选项,同时在连接时也要使用该选项
-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会搜索库文件的路径

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平台静态库、动态库的一些笔记
原文链接: https://www.cnblogs.com/yinghao-liu/p/6395255.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/249303

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月14日 上午3:33
下一篇 2023年2月14日 上午3:33

相关推荐