Android源码编译Werror类型错误处理
Posted jhwwq
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android源码编译Werror类型错误处理相关的知识,希望对你有一定的参考价值。
android源码下编译Native源码采用Android.mk或者Android.bp,由于源码编译选项越来越严格,特别是Android O平台以后,默认编译选项都使用了-Wall -Werror字段,现在简要说明下
1 -Wall和-Werror字段
Wall:编译阶段显示所有警告。
Werror:将所有的警告当成错误进行处理,使出现警告时就停止编译,这种错误是最常见的。
2 LOCAL_CFLAGS
LOCAL_CFLAGS是Android.mk中定义的一个编译选项,稍微总结下常用:
-D选项,相当于添加宏定义
LOCAL_CFLAGS += -DXXX 相当于在所有源文件中增加一个宏定义#define XXX
-O 代表默认优化,可选:-O0不优化,-O1低级优化,-O2中级优化,-O3高级优化,-Os代码空间优化,用得少,暂不在讨论范围之内。
-g 是生成调试信息,生成的可执行文件具有和源代码关联的可调试的信息
-W[no-]<警告选项> no- 表示诊断时忽略这个警告 ,这个是本文的重点地方,划重点了
编译器的警告设置参数,拥有众多的选项,下面举一些常用的例子:
-Woption 让编译器给出option指定的编译警告,常用的一些如下:
unused-function: 遇到仅声明过但尚未定义的静态函数时发出警告
unused-parameter: 从未用过的函数参数的警告。
unused-variable: 在本地声明但从未用过的变量的警告。
unused-value: 经计算但从未用过的值得警告。
return-type: 对函数返回类型不当的警告。
uninitialized:在初始化之前就使用自动变量。
float-equal: 比较两个浮点数是否相等。
-Wall 给出“几乎”所有的编译器警告,注意是“几乎”。下面是一些-Wall没有输出的警告类型:
sign-compare:将有符号类型和无符号类型数据进行比较时发出警告。
unreachable-code:如果发现从未执行的代码时给出警告。
inline:如果某函数不能按要求内嵌(inline),则无论是函数声明为inline或者是指定了
-finline-functions 选项,编译都将发出警告。
-Werror 把所有的警告都视为错误处理。
-Wno-option 如果我们不想输出某些警告信息,可以使用此参数形式,
比如:LOCAL_CFLAGS := -Wno-unused-parameter
3 修改方法
相对比较靠谱的方法就是LOCAL_CFLAGS 中增加编译器的警告设置参数,这里我们如下错误说明:
error: unused parameter 'conv' [-Werror,-Wunused-parameter]
error: data argument not used by format string [-Werror,-Wformat-extra-args]
具体步骤如下:
在该Native中的Android.mk中添加如下编译选项:
LOCAL_CFLAGS += -Wno-unused-parameter \\
-Wno-format-extra-args
ps 以上资源copy了大家的精华,但是链接不记得了,实在抱歉!!
编译器选项在 -Wall -Werror 之后发出错误警告
【中文标题】编译器选项在 -Wall -Werror 之后发出错误警告【英文标题】:Compiler option make error warning after -Wall -Werror 【发布时间】:2020-03-03 12:13:58 【问题描述】:-Wall -Werror
已设置。
我需要添加一些标志以使未使用的-s 不是错误而是警告。 -Wno-unused
完全丢弃警告。我想看到警告并成功编译。怎么样?
我试过了:-Werror=no-unused
但它不起作用。海湾合作委员会 9。
【问题讨论】:
什么是“未使用-s”? unused-s 是未使用的函数、未使用的变量等 【参考方案1】:来自GCC manual:
-Werror=
将指定的警告变成错误。附加了警告的说明符;例如
-Werror=switch
将-Wswitch
控制的警告变成错误。此开关采用否定形式,用于否定-Werror
以获得特定警告;例如-Wno-error=switch
使-Wswitch
警告不是错误,即使-Werror
生效。
所以你要传递的选项是-Wno-error=unused
。
【讨论】:
以上是关于Android源码编译Werror类型错误处理的主要内容,如果未能解决你的问题,请参考以下文章
nginx编译下出现error: this statement may fall through [-Werror=implicit-fallthrough=]
Spring源码编译报错:reactor.core.publisher中的MonoProcessor已过时
C语言-Werror=sign-compare编译错误解决方案