gcc编译配置总结

本文总结了GCC编译器的参数配置,包括ABI选择(soft, softfp, hard)、-fopenmp多线程支持,以及针对ARM平台和HI3516设备的特定编译设置。通过深入研究相关资源,可以提升代码的编译效率和质量。同时推荐使用Cppcheck结合GCC的严格警告检查来提高代码质量。" 131944653,12708359,DIY蓝牙音频播放器:无线Hi-Fi放大器模块详解,"['音视频', '蓝牙技术', 'DIY项目', '音频工程', '电子制作']

1. gcc参数说明

gcc编译基本选项:
    -g: 编译时产生调试信息;
	-ggdb: 尽可能的生成gdb的能够使用的调试信息;
	-Werror: 把警告当作错误;
	-Wall: 打开一些很有用的警告选项;
	-Wunreachable-code: 编译器探测到永远不会执行到的代码,就给出警告;
	-pipe: 在编译过程的不同阶段之间使用管道而非临时文件进行通信,可以加快编译速度;
	-O0: 无优化(默认);
	-O和-O1: 能减少目标文 件大小以及执行时间并且不会使编译时间明显增加的优化,有分支预测、分支优化、
		  可能情况下不产生栈帧等等;
	-O2: -O1基础上增加了更多优化;
	-O3: -O2基础上增加-finline-functions允许编译器选择某些简单的函数在其被调用处展开,比较安全的选项,
	     特别是在CPU二级缓存较大时建议使用; -funswitch-loops将循环体中不改变值的变量移动到循环体之外;
	     -fpredictive-commoning为了清除多余的溢出,在重载之后执行一个额外的载入消除步骤,
	     -fgcse-after-reload优化reload的次数、 -ftree-vectorize优化loop的并行性.

2. 确认处理器支持指令特性

am57xx-evm:~#cat /proc/cpuinfo
	model name      : ARMv7 Processor rev 2 (v7l)
	Features        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm

3. 通常项目编译设置:

DEBUG "ENV{CXXFLAGS} -O0 -g -ggdb -Werror -Wall -Wunreachable-code -pipe"
RELEASE "ENV{CXXFLAGS} -O3 -Werror -Wall"
CXX_FLAGS "${DEBUG}  -mcpu=cortex-a7  -mfloat-abi=softfp  -mfpu=neon -fopenmp -std=c++0x -Wl,-Map=XXXXmain.map"

-mfloat-abi:ABI即“application binary interface”,指定将c代码编译成汇编代码时使用的一种规则(选项soft、softfp、hard)。
"soft"选项:表明不使用FPU硬件,而是使用GCC的整数算术运算来模拟浮点运算。
"softfp"选项:表明要使用FPU硬件来做浮点运算,只是,函数的参数传递到整数寄存器(r0-r3)中,然后再传递到FPU中。
"hard"选项:表明要使用FPU硬件来做浮点运算,并且,函数的参数直接传递到FPU的寄存器(s0、d0)中。
-fopenmp:指定代码块编译为多线程化并行计算。

值得深入研究:
ARM平台指令的编译和优化:https://blog.csdn.net/qiek/article/details/50900890
HI3516的编译参数:https://blog.csdn.net/u014470361/article/details/87931856

4.参考网站

Gcc 编译选项:
https://www.cnblogs.com/LiuYanYGZ/p/5548855.html
Gcc 编译优化方式:
https://blog.csdn.net/qq_31108501/article/details/51842166
https://blog.csdn.net/skyflying2012/article/details/22849707

备注:Cppcheck静态检查工具,加上 gcc 对警告严格检查,可以大大提高代码质量,减少bug。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值