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

557

被折叠的 条评论
为什么被折叠?



