在GitHub上下载了一个demo,自己编译运行时,v8a的so是可以正常编译运行的,但是就是v7a的不能也一直报错,最后发现在Android.mk文件里去掉-Werror字段就可以了。于是上网了解了一下关于-Werror的意思,这里记录一下

Android源码下编译Native源码采用Android.mk或者Android.bp,由于源码编译选项越来越严格,特别是Android O平台以后,默认编译选项都使用了-Wall -Werror字段,现在简要说明下

1. -Wall和-Werror字段

  • Wall:编译阶段显示所有警告。
  • Werror:将所有的警告当成错误进行处理,使出现警告时就停止编译,这种错误是最常见的。

2. LOCAL_CFLAGS

LOCAL_CFLAGSAndroid.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

参考:

Android源码编译Werror类型错误处理

Android native项目编译v7a时-Werror参数导致报错的更多相关文章

  1. Mysql 书写语句时避免出现关键字导致报错 关键字大全

    ADD ALL ALTER ANALYZE AND AS ASC ASENSITIVE BEFORE BETWEEN BIGINT BINARY BLOB BOTH BY CALL CASCADE C ...

  2. C#编译器优化那点事 c# 如果一个对象的值为null,那么它调用扩展方法时为甚么不报错 webAPI 控制器(Controller)太多怎么办? .NET MVC项目设置包含Areas中的页面为默认启动页 (五)Net Core使用静态文件 学习ASP.NET Core Razor 编程系列八——并发处理

    C#编译器优化那点事   使用C#编写程序,给最终用户的程序,是需要使用release配置的,而release配置和debug配置,有一个关键区别,就是release的编译器优化默认是启用的.优化代码 ...

  3. vue项目初始化时npm run dev报错webpack-dev-server解决方法

    vue项目初始化时npm run dev报错webpack-dev-server解决方法 原因:这是新版webpack存在的BUG,卸载现有的新版本webpack,装老版本就好webpack-dev- ...

  4. webRTC中回声消除(AEC)模块编译时aec_rdft.c文件报错:

    webRTC中回声消除(AEC)模块编译时aec_rdft.c文件报错. 原因是: 局部变量ip跟全局变量冲突的问题,可以将局部变量重新命名一下,就可以通过编译了. aec_rdft.c修改以后文件代 ...

  5. 安装php时,make步骤报错make: *** [ext/gd/gd.lo] Error 1

    安装PHP时,make步骤报错make: *** [ext/gd/gd.lo] Error 1 /usr/local/src/LAMP+memcahed+catci/php-5.4.0/ext/gd/ ...

  6. laravel 项目表单中有csrf_token,但一直报错419错误 解决redis连接错误:MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persi

    laravel 项目表单中有csrf_token,但一直报错419错误,因为项目中使用到Redis缓存,在强制关闭Redis后出现的问题,查询laravel.log文件查找相关问题 安装redis后在 ...

  7. 关于导入本地maven项目pom.xml出现missing artifact org....报错处理

    一.导入本地maven项目步骤:

  8. python踩坑系列之导入包时下划红线及报错“No module named”问题

    python踩坑系列之导入包时下划红线及报错“No module named”问题 使用pycharm编写Python时,自己写了一个包(commontool),在同级另一个路径下(fileshand ...

  9. Python模块学习之xlrd 读取Excel时传入formatting_info=True报错:NotImplementedError: formatting_info=True not yet implemented

    问题:xlrd读取Excel时传入 formatting_info=True 报错 之前我们使用读取xls文件的时候都是使用的xlrd库,但是这个库只能操作 .xls格式,对于后来的 .xlsx的版本 ...

  10. MatOfPoint作为minAreaRect的参数总是报错"throw new IllegalArgumentException("Incomatible Mat");

    MatOfPoint matPt = contours.get(i)       minRect.set(i, Imgproc.fitEllipse( new  MatOfPoint2f(matPt) ...

随机推荐

  1. NC16758 [NOIP2000]单词接龙

    题目链接 题目 题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在&quo ...

  2. NC14526 购物

    题目链接 题目 题目描述 在遥远的东方,有一家糖果专卖店. 这家糖果店将会在每天出售一些糖果,它每天都会生产出 \(m\) 个糖果,第i天的第j个糖果价格为 \(C[i][j]\) 元. 现在的你想要 ...

  3. fmt、变量、常量

    fmt包 fmt包主要用于打印数据,常用的有Printf.Print.Printf // 文件所属包 package main // 导入fmt包,主要用于打印数据 import "fmt& ...

  4. C语言,变长数组的用法

    在我的<C语言,结构体成员的地址>文章中,定义了一个demo_node结构体,其中用到变长数组char addr[0].本文以此为例,对C语言变长数组的基本用法展开介绍. typedef ...

  5. springboot jpa自定义SQL查询

    说明 在使用JPA实现数据持久化过程中经常会遇到这种情况:我有2张表是一对多的关系,需要通过一个外键ID去关联查询到另外一张表的字段.例如,1张商品表food_info其中存有商品分类ID categ ...

  6. 一个有意思的问题:Kafka的消费Offset会溢出吗

    最近在项目上接入公司APP产品的用户点击日志数据时,发现消费者组的Offset值非常大,才一天的时间,已提交的Offset值就有千亿级别了. 于是不禁想了一个问题:假设一个Topic就只有一个Part ...

  7. 并发与并行的区别---python

    并发与并行的区别 Erlang 之父 Joe Armstrong 用一张5岁小孩都能看懂的图解释了并发与并行的区别 并发是两个队列交替使用一台咖啡机,并行是两个队列同时使用两台咖啡机 如果是串行,一个 ...

  8. 面向对象基础---day02

    成员变量和局部变量区别 封装 private关键字 1.是一个权限修饰符 2.可以修饰成员(成员变量和成员方法) 3.作用是保护成员不被别的类使用,被private修饰的成员只在本类中才能访问 针对p ...

  9. 前后端分离项目(八):后端报错Field 'id' doesn't have a default value

    好家伙,又到了修bug的环节,(深叹一口气) 好了,来看报错 2022-10-29 23:27:52.155 WARN 15068 --- [nio-8011-exec-2] o.h.engine.j ...

  10. Node.JS http server

    一.自动更新刷新 http server browser-sync dist --files "**/*" 二.http-server 三.webpack-dev-server的c ...