海思官方makefile源码的学习 3
Posted 七 六 伍
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了海思官方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 ,是显式加载动态库的动态函数库
以上是关于海思官方makefile源码的学习 3的主要内容,如果未能解决你的问题,请参考以下文章