海思官方makefile源码的学习 3

下面是一段 海思官方的makefile的代码,

VSS_CFLAGS := -fno-aggressive-loop-optimizations
VSS_CFLAGS += -ffunction-sections -fdata-sections
VSS_CFLAGS += -Wall -g  -Wno-date-time
VSS_CFLAGS += -fstack-protector
VSS_CFLAGS += -DVER_X=1 -DVER_Y=0 -DVER_Z=0 -DVER_P=0 -DVER_B=10 -DUSER_BIT_64 -DKERNEL_BIT_64 -DENABLE_JPEGEDCF -Wno-date-time
VSS_CFLAGS += -O2 -fPIC -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -Wno-error=implicit-function-declaration
VSS_CFLAGS += -mcpu=cortex-a73.cortex-a53
VSS_CFLAGS += -lpthread -lm -ldl -DISP_V2 -lstdc++ -DHI_XXXX

# Compile Define
COMPILE    = $(CC) $(VSS_CFLAGS) -c "$<" -o "$@" $(VSS_INCLUDE_PATH)
COMPILEDEP = $(CC) -MM "$<" $(VSS_CFLAGS) $(VSS_INCLUDE_PATH)
LINK       = $(CC) $(VSS_CFLAGS) -Wl,--gc-sections

VSS_CFLAGS := -fno-aggressive-loop-optimizations

gcc启用优化并使用-fno-aggressive-loop-optimizations标志导致无限循环行为消失

官方解释: https://gcc.gnu.org/gcc-4.8/changes.html
GCC now uses a more aggressive analysis to derive an upper bound for the number of iterations of loops using constraints imposed by language standards. This may cause non-conforming programs to no longer work as expected, such as SPEC CPU 2006 464.h264ref and 416.gamess. A new option, -fno-aggressive-loop-optimizations, was added to disable this aggressive analysis. In some loops that have known constant number of iterations, but undefined behavior is known to occur in the loop before reaching or during the last iteration, GCC will warn about the undefined behavior in the loop instead of deriving lower upper bound of the number of iterations for the loop. The warning can be disabled with -Wno-aggressive-loop-optimizations.

-ffunction-sections -fdata-sections

有时我们会遇到这种情况,可执行程序需要链接一些静态库,但是静态库中的函数并没有全部使用,只用了其中的几个,但是系统默认会自动把整个静态库全部链接到可执行程序中,造成可执行程序的大小大大增加,浪费了flash空间和内存空间。gcc为我们提供的解决这个问题的方法。

**

-Wall -g -Wno-date-time

**
gcc 的-Wall 选项可以打印出编译时所有的错误或者警告信息。这个选项很容易被遗忘,编译的时候,没有错误或者警告提示,以为自己的程序很完美,其实,里面有可能隐藏着许多陷阱。
变量没有初始化,类型不匹配,或者类型转换错误等警告提示需要重点注意,错误就隐藏在这些代码里面。没有使用的变量也需要注意,去掉无用的代码,让整个程序显得干净一点。

**

-fstack-protector

**
检测堆栈溢出

**

-lpthread -lm -ldl -DISP_V2 -lstdc++ -DHI_XXXX

**
数学库 -lm ;
-lptread 链接线程库
lc 是link libc
lm 是link libm
lz 是link libz

-ldl

#include <dlfcn.h>

dlopen(),dlclose() , dlerror() , dlsym() , the Base Definitions volume of IEEE Std 1003.1-2001, <dlfcn.h>

这些函数,动态库的相关部分

-dl ,是显式加载动态库的动态函数库

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七 六 伍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值