gcc编译参数详解概述
gcc 编译器是经常使用的,可是,自己却没有针对它做过专门的研究,当遇到问题了,总结一下,算是对未来有个积累吧。
一 关于编译告警:
1 -w : 关闭所有警告,不建议使用
2 -W 开启素有gcc 能提供的警告
3 -werror : 将所有警告转为错误,开启该选项,遇到警告会终止编译
4 -Wall: 编译后显示所有警告.
二 关于节省空间:
1 概念:GCC链接操作是以section作为最小的处理单元,只要一个section中的某个符号被引用,该section就会被加入到可执行程序中去。因此,GCC在编译时可以使用 -ffunction-sections和 -fdata-sections 将每个函数或符号创建为一个sections,其中每个sections名与function或data名保持一致。而在链接阶段, -Wl,–gc-sections 指示链接器去掉不用的section(其中-wl, 表示后面的参数 -gc-sections 传递给链接器),这样就能减少最终的可执行程序的大小了。
2 使用方法:
CFLAGS += -ffunction-sections -fdata-sections
LDFLAGS += -Wl,--gc-sections
三 关于内建函数:
1 __builtin_popcount(x):x中1的个数。
2 __builtin_ctz(x):x末尾0的个数。x=0时结果未定义。
3 __builtin_clz(x):x前导0的个数。x=0时结果未定义。上面的宏中x都是unsigned int型的,如果传入signed或者是char型,会被强制转换成unsigned int。
4 __builtin_parity(x):x中1的奇偶性。
5 __builtin_return_address(n):当前函数的第n级调用者的地址,用的最多的就是__builtin_return_address(0),即获得当前函数的调用者的地址。注意,该函数实现是体系结构相关的,有些体系结构只实现了n=0的返回结果。
四 关于优化选项:
1 -oN :指定代码的优化等级为N,可取值为0,1,2,3; o0没有优化,o3优化级别最高。
2 -os 使用了-o2的部分优化选项,同事对代码尺寸进行了优化。
五 关于调试:
1 -v 显示gcc 执行的详细过程,以及gcc和相关程序的版本号.
2
参考文档:
1 https://blog.csdn.net/pengfei240/article/details/55228228
2 https://blog.csdn.net/jasonchen_gbd/article/details/44948523
gcc编译参数详解概述的更多相关文章
- gcc编译参数详解一(-ffunction-sections -fdata-sections)
背景 有时我们的程序会定义一些暂时使用不上的功能和函数,虽然我们不使用这些功能和函数,但它们往往会浪费我们的ROM和RAM的空间.这在使用静态库时,体现的更为严重.有时,我们只使用了静态库仅有的几个功 ...
- 【转】 linux 安装nginx及编译参数详解
版权声明:本文为博主原创文章,未经博主允许不得转载. 从官网下载一个nginx 的tar.gz 版. 安装方式使用make 安装 第一步:解压 tar -zxvf nginx-1.7.4.tar.g ...
- GCC参数详解
GCC参数详解 [介绍] gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步 1.预处理,生成.i的文件 2.将预处理后的文件不转换成汇 ...
- Linux下nginx编译安装教程和编译参数详解
这篇文章主要介绍了Linux下nginx编译安装教程和编译参数详解,需要的朋友可以参考下 一.必要软件准备1.安装pcre 为了支持rewrite功能,我们需要安装pcre 复制代码代码如下: # y ...
- mysql编译参数详解
mysql编译参数详解(./configure) 1.--prefix=PREFIX:指定程序安装路径: 2.--enable-assembler:使用汇编模式:(文档说明:compiling i ...
- GCC 指令详解及动态库、静态库的使用
GCC 指令详解及动态库.静态库的使用 一.GCC 1.1 GCC 介绍 GCC 是 Linux 下的编译工具集,是「GNU Compiler Collection」的缩写,包含 gcc.g++ 等编 ...
- [转]GCC参数详解
[介绍] gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步 1.预处理,生成.i的文件[预处理器cpp] 2.将预处理后的文件不转换成 ...
- TCP/IP协议详解概述
TCP/IP协议详解卷1--第一章概述--读书笔记 作者:vpoet 日期:2015/06/25 注:本系列的文章只是作者对TCP/IP协议的理解,难免会出现纰漏或者不完整,当然也有可能很肤浅,希望大 ...
- GCC 参数详解
转载出处:http://blog.csdn.net/yff1030/article/details/8592077 原文:http://www.cppblog.com/SEMAN/archive/20 ...
随机推荐
- How to Reset VW Steering Assist 1S1909144P with OBDSTAR X300 DP
Vehicle model:VW Polo 2015 (or other Audi, Seat, Skoda, VW with unit 1S1 909 144 P) Module:Control u ...
- NC 部署问题
1.was环境部署日志 IBM/WEBSPHERE/APPSERVER/PRORFILES/APPSRV01/LOGS/SERVER1/
- GPS坐标系
本次测试之坑,人车定位偏差,分析如下 车的定位由后台提供,由gps上报位置,采用WGS-84坐标系 前端(app/小程序)使用腾讯地图,或者高德地图,采用的是GCJ-02坐标系,或者在GCJ-02基础 ...
- css3 --linear-gradient-渐变色
//由上至下变色 background:-moz-linear-gradient( top,#f9b347,#f4ad40,#f9b347); background:-webkit-gradient ...
- EmWin 接触---基础函数
创建对话框,需求两个基本要素:资源表和对话框过程.对话框可以基于阻塞(使用 GUI_ExecDialogBox())或非阻塞(使用 GUI_CreateDialogBox())方式创建.以下为例: G ...
- iOS dispatch_semaphore_t(信号量)和 2.dispatch_group_t (组)
2017年,回望过去,前半年还致力于iOS开发,后半年就开始了python的漫漫之路,一路上走走停停,不过还好,总的来说,2017是收获的一年,也是付出的一年.2018加油! 话题转回来,关于线程执行 ...
- 移动端各种滚动场景需求的插件better-scroll
移动端各种滚动场景需求的插件: 文档地址: better-scroll:https://ustbhuangyi.github.io/better-scroll/doc/zh-hans/#better- ...
- 父组件传值给子组件的v-model属性
父组件如何修改子组件中绑定的v-model属性 因为v-model属性是双向数据绑定,而vue的通信方式又是单向通信,所以,当子组件想要改变父组件传过来的值的属性时,就会报错,典型的就是父组件传值给子 ...
- JavaScript基础视频教程总结(081-090章)
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- LAMP安装教程
LAMP环境配置安装注意安装步骤及说明事项. Linux + apache+mysql+php 附件: 1. 访问ftp报错 解决: 关闭selinux vi /etc/selinux/config ...