Fork me on GitHub

编译选项含义

编译选项:

现在我们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

网上没有相关的资料

 

posted @ 2016-07-25 16:41  yooooooo  阅读(5255)  评论(0编辑  收藏  举报