编译选项含义

编译选项:

现在我们Makefile中的编译选项有:

-g :可执行程序包含调试信息;(给gdb调试使用)

-O2:该优化选项会牺牲部分编译速度,除了执行-O1所执行的所有优化之外

还会采用几乎所有目标配置支持的优化算法,用以提高目标代码的运行速度。也就是增加相应的优化编译选项,具体看下面的相应链接;

https://www.zhihu.com/question/27090458

-fpic:用于生成位置无关代码。

位置无关码的作用:

1、程序在运行期间动态加载到内存中;

2、程序在不同场合与不同程序组合后加载到内存(一般用于动态链接库)

3、在运行期间不同地址相互之间的映射;(如bootloader)

简言之,位置无关码就是可以在进程的任意内存位置执行的目标码,动态链接库必须使用。

-L.

-L 搜索相应库文件路径,.是指当前路径;

-march=armv7-a

-march=armv7-a是指编译出来的汇编语言是针对armv7架构的;

-mtune=contex-a8

与上面一样,这个则是针对板子上的CPU选项是contex-a8类型的;

-mfloat-abi=softfp

上面的编译选项和-mfloat-abi=hard,这个参数都用来产生硬浮点指令;硬浮点则是通过浮点运算单元(FPU)来完成,使用实际的硬件浮点运算单元会比软浮点快得多;

-mthumb-interwork

这个编译选项则是支持编译出来的汇编语言可以支持ARM和THUMB指令集;

-mno-thumb-interwork

缺省情况下是“-mno-thumb-interwork”,因为指定了“-mthumb-interwork”产生的代码稍微大一些;

-Wno-write-strings:

会忽略掉C++ char * 转const char  *的警告,这样并不会很安全;

-Wno-trigraphs

关闭ANSI C的三联符编译出现的错误;

三联符的概念:

http://blog.csdn.net/daheiantian/article/details/6095507

-fno-tree-vectorize

关闭程序中的向量化的选项;如果增加在-O3会默认开启,但我们并没有使用-O3选项;

程序向量化选项的意义网上搜索相应的资料并不多,但总结起来应该就是使用gcc支持将相应的数学公式直接转换成程序代码,提高算法速度。

-fno-inline

忽略代码中的inline关键字,该选项使编译器将内联函数以普通函数正常对待,等同于无优化选项的处理。

-fno-short-enums

-fshort-enums支持给enum类型分配它声明的值域范围的字节数;

enum类型等于大小足够的最小整数类型。

也就是说

typedef enum num{

      one = 1,

      two = 2,

      three = 3,

      four = 4,

}NUM;

NUM num1;

sizeof(num1)不增加这个-fshort-enums选项的时候为4,增加后为大小为1;

-fno-short-enums则是无这个选项优化处理。gcc是默认没有-fshort-enums这个选项的;

-Wundef

当一个没有定义的符号出现在 #if 中时,给出警告。

-fexpensive-optimizations

执行各种消耗昂贵的优化技术,但是不一定保证运行时性能能提升,反而可能一定程度上会产生负面影响.

 -frename-registers:

在寄存器分配后,通过使用registersleft over来避免预定代码中的虚假依赖。

-fomit-frame-pointer

能够提高程序性能;

原理上最主要的区别是少了栈帧的切换和栈地址的保存;在gdb 执行disassemble命令时,由于没有保存相应栈调用地址,而导致无法追踪函数调用顺序的问题;

-Dstrlcat=strncat

网上没有相关的资料

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏MasiMaro 的技术博文

C/C++中define定义的常量与const常量

常量是在程序中不能更改的量,在C/C++中有两种方式定义常量,一种是利用define宏定义的方式,一种是C++中新提出来的const型常变量,下面主要讨论它们之...

841
来自专栏编程

文件与异常(三)

异常 Python使用被称为异常的特殊对象来管理程序执行期间发生的错误。每当发生让Python不知 所措的错误时,它都会创建一个异常对象。如果你编写了处理该异常...

1626
来自专栏雪胖纸的玩蛇日常

老男孩Python全栈开发(92天全)视频教程 自学笔记03

1915
来自专栏Vamei实验室

Linux从程序到进程

计算机如何执行进程呢?这是计算机运行的核心问题。即使已经编写好程序,但程序是死的。只有活的进程才能产出。我们已经从Linux进程基础中了解了进程。现在我们看一下...

1819
来自专栏北京马哥教育

初学python的30个操作难点汇总(新手必看篇)

初学Python的人总会遇到这样或者那样的问题,在我学习Python的这段时间我总结了自己的29个问题,具体如下: 1 在cmd下 盘与盘之间的切换 直接 D...

3207
来自专栏黄Java的地盘

旧项目TypeScript改造问题与解决方案记

由于本次改造的项目为一个通过NPM进行发布的基础服务包,因此本次采用TypeScript进行改造的目标是移除Babel全家桶,减小包体积,同时增加强类型约束从而...

431
来自专栏安恒网络空间安全讲武堂

bugkuctf_web_writeup(部分)--下

bugkuctf平台10个较简单的web题目writeup,适合新手入门,可以找来试试http://ctf.bugku.com/bbs 。 本地包含 题目描述:...

3873
来自专栏性能与架构

ES6 新特性示例

JS的新版本 ES6/ECMAScript2015 在去年出来了,我们现在普遍使用的ES5是在2009年出来的,相隔这么多年,变化比较大,添加了一些很好用的特性...

2526
来自专栏安恒网络空间安全讲武堂

MS08-067漏洞调试分析详解

MS08-067漏洞调试分析详解 一、前言 在《Metasploit渗透测试魔鬼训练营》中有对MS08-067漏洞原理的分析,不过作者的文笔十分晦涩难懂,读起来...

22110
来自专栏美团技术团队

高级语言的编译:链接及装载过程介绍

引言 随着越来越多功能强大的高级语言的出现,在服务器计算能力不是瓶颈的条件下,很多同学会选择开发效率高,功能强大的虚拟机支持的高级语言(Java),或者脚本语言...

3468

扫描关注云+社区