GCC编译选项含义解析
GCC 编译
GCC的编译流程分为四个步骤,分别为:
- 预处理(Pre-Processing)
- 可以通过
gcc -E hello.cc -o hello.i查看中间结果
- 可以通过
- 编译(Compiling)
- 汇编(Assembling)
- 链接(Linking)
gcc 命令只能编译C++源文件,而不能自动和C++程序使用的库链接。因此,通常使用g++命令来完成C++程序的编译和链接,该程序会自动调用gcc实现编译。
1. 总体选项
-c:只激活预处理、编译和汇编过程,但不做link,只生成目标文件-o:指定输出文件,未指定时,默认为a.out-S:只激活预处理和编译,生成.s的汇编文件-E:只激活预处理,需要重定向到一个文件里,gcc -E hello.c > pre_hello.i
2. 调试选项
-g:以操作系统的本地格式(stabs, COFF, XCOFF等)产生调试信息,以便GDB使用-glevel:调试信息生成级别,默认为2,如-g3- level=1,输出少量调试信息,没有局部变量和行号信息
- level=3,输出较多调试信息
3. 预处理器选项
-Dmacro:相当于C语言中的#define macro-Dmaroc=defn:定义宏macro的内容为defn,相当于C语言中#define marco=defn-Umacro:取消宏macro,-U 选项在所有-D 选项之后使用-include file:当某个文件需要另一个文件时,可以用它来设定,功能类似#include <filename>,如gcc hello.c -include /root/ss.h
4. 链接器选项
-static:将禁止使用动态库-shared:指定生成一个共享目标文件,常搭配-fPIC使用-Wl,option:把选项option传递给链接器;如果option包含逗号,会分隔为多个选项-symbolic:建立共享目标文件时候,把引用绑定到全局符号上
5. 目录选项
-l{library]}:指定编译的时候使用的库,如gcc -lcurses hello.c,链接时使用-L{dir}:指定编译时,搜索库的路径。如果不指定,编译器将只在标准库的目录搜索-I{dir}:增加编译时,搜索头文件的路径。 当使用#include "file"时,gcc/g++会先在当前目录查找你指定的文件,若没有,则去缺省的头文件目录找。若使用-I指定了目录,则会优先在指定的目录找,再按照常规顺序寻找。对于#include <file>,gcc/g++会到-I指定目录找,若没有,则去缺省的头文件目录找。-I-:取消前一个-I{dir}的参数功能-nostdinc:告诉编译器不在系统缺省的头文件目录里找头文件,一般与-I联合使用-nostdinc++:告诉编译器不在g++指定的标准路径中搜索,但仍在其他路径搜索,此选项在创建libg++库使用
6. 警告选项
-w:禁止所有警告信息(不建议)-Wall:开启大部分警告提示(建议使用)-Werror:视警告为错误,出现任何警告立即中断编译
7. 优化选项
-O0:不优化-O1:优化,对于大函数,优化编译占用稍微多的时间和相当大的内存-O2:更多优化,除了空间和速度交换的优化选项,执行几乎所有的优化- 如:进行循环展开和函数内联
- 会增加编译时间,但提高了生成代码的执行效率
-ffloat-store:不要在寄存器中存放浮点变量
8. 代码生成选项
-fpic:如果支持这种目标机,编译器就生成位置无关目标码,适用与共享库-fPIC:如果支持这种目标机,编译器就生成位置无关目标码,即使分支需要大范围转移
9. 语言选项
-std=c++11:支持c++11-ansi:支持符合ANSI标准的C程序-fno-asm:用于诗词安anis选项中功能的一部分,禁止将asm,inline,typeof用作关键字-x language filename:设定此文件使用的语言,无视后缀名,且对此参数后多个文件有效,如gcc -x c hello.pig -x none,指定none来关闭上一个选项
10. 机器相关选项
-mhard-float:输出包括浮点指令的目标码,缺省选项-msoft-float:警告:没有为SPARC提供GNU浮点库.一般说来使用该机型本地C编译器的相应部件- 不能直接用于交叉编译.你必须自己安排,提供用于交叉编译的库函数.
-msoft-float改变了输出文件中的调用约定;因此只有用这个选项编译整个程序才有意义
GCC编译选项含义解析的更多相关文章
- 2015-08-26: GCC编译选项(转载)
gcc提供了大量的警告选项,对代码中可能存在的问题提出警告,通常可以使用-Wall来开启以下警告: -Waddress -Warray-bounds (only with -O2) ...
- GCC 编译选项
http://www.cnblogs.com/xmphoenix/archive/2011/03/21/1989944.html GCC 编译选项(转) gcc提供了大量的警告选项,对代码中可能存在的 ...
- 用于阻止缓冲区溢出攻击的 Linux 内核参数与 gcc 编译选项
先来看看基于 Red Hat 与 Fedora 衍生版(例如 CentOS)系统用于阻止栈溢出攻击的内核参数,主要包含两项: kernel.exec-shield 可执行栈保护,字面含义比较“绕”, ...
- GCC编译选项
一.看例子分析gcc 的编译选项 gcc -o hello hello.c -I /home/hello/include -L /home/hello/lib -lworld 1.-I /home/h ...
- iReport默认参数和变量的含义解析【转】
iReport默认参数和变量的含义解析[转] http://uule.iteye.com/blog/775338 参考:http://blog.csdn.net/terryzero/article/d ...
- gcc编译选项汇集
gcc -g 调试选项(DEBUGGING OPTION)GNU CC拥有许多特别选项,既可以调试用户的程序,也可以对GCC排错: -g 以操作系统的本地格式(stabs, COFF, XCOFF,或 ...
- 【ABAP系列】SAP ABAP SY-SUBRC的含义解析
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP SY-SUBR ...
- (转载)gcc编译选项总结
转载自:https://blog.csdn.net/gatieme/article/details/21389603 常用编译选项 gcc and g++分别是gnu的c & c++编译器 g ...
- (GCC) gcc 编译选项 -fno-omit-frame-pointer,-fno-tree-vectorize,fno-optimize-sibling-calls;及内存泄漏、非法访问检测 ASAN
omit-frame-pointer 开启该选项,主要是用于去掉所有函数SFP(Stack Frame Pointer)的,即在函数调用时不保存栈帧指针SFP,代价是不能通过backtrace进行调试 ...
- GCC 编译选项(转)
转:http://www.cnblogs.com/xmphoenix/archive/2011/03/21/1989944.html gcc提供了大量的警告选项,对代码中可能存在的问题提出警 告,通常 ...
随机推荐
- mybatis踩坑之integer类型是0的时候会被认为0!=''是假
当你的参数类型是integer类型,并且传的是0的时候,在SQL里面做if判断的时候 <if test="auditStatus != null and auditStatus != ...
- Codeforces Round #751 (Div. 1)
CF1601A Array Elimination 洛谷传送门 CF1601A 分析 可以发现每一位可以拆开,也就是每一位的一的个数一定是 \(k\) 的倍数, 直接求 \(\gcd\) 出来,它的约 ...
- #容斥,搜索,线性筛#CF83D Numbers
洛谷 CF83D 分析 题意就是\(\sum_{i=l}^r[k|i]*[mn[\frac{i}{k}]\geq k]\) 首先线性筛每个数的最小质因数,如果\(\frac{r}{k}\)较小直接暴力 ...
- FFmpeg开发笔记(十二)Linux环境给FFmpeg集成libopus和libvpx
MP4是最常见的视频封装格式,在<FFmpeg开发实战:从零基础到短视频上线>一书的"1.2.3 自行编译与安装FFmpeg"介绍了如何给FFmpeg集成x264和 ...
- 使用OHOS SDK构建lua
参照OHOS IDE和SDK的安装方法配置好开发环境. 从github下载源码. 执行如下命令: git clone --depth=1 https://github.com/lua/lua.git ...
- Git 安全远程访问:SSH 密钥对生成、添加和连接步骤解析
使用 SSH 密钥对的 Git 安全远程访问:生成.添加和连接 SSH(Secure Shell)是一种用于安全远程访问的协议,它提供了加密通信和身份验证机制.在使用 SSH 连接到远程 Git 存储 ...
- HMS Core机器学习服务身份证识别功能,实现信息高效录入
在各类App都要进行实名制的当下,进行身份认证自然不可避免.平时购买火车票.飞机票,住酒店.打游戏等都需要身份认证,如果每次都要输入那18位的身份证号十分麻烦,手一抖就会出错.因此,使用华为机器服务身 ...
- IIS applicationHost.config 查找历史
背景 iis 有时候需要修改配置,一般来说,我们会去修改applicationHost.config配置,当然,很多时候我们都需要去备份一个配置文件,但是可能忘记了,那么是否有补救的方式? 补救方式 ...
- Sparse稀疏检索介绍与实践
Sparse稀疏检索介绍 在处理大规模文本数据时,我们经常会遇到一些挑战,比如如何有效地表示和检索文档,当前主要有两个主要方法,传统的文本BM25检索,以及将文档映射到向量空间的向量检索. BM25效 ...
- 接口文档神器apidoc
1.apidoc介绍 1.apidoc是什么? api文档生成工具:基于源代码备注创建的接口文档: 2.apidoc优势是啥? 超简单文档生成器:几乎支持目前主流的所有风格的注释, 如可在C#.Go. ...