各位,

昨天今天尝试编译ohos-arm64,编译不过,碰到的主要问题是-Wall -Werror导致的一些Warning被当作错误。
仔细看挡住的这些Warning,基本上都是从32切到64以后,long的范围变化导致的。
在64位系统下,int为了与之前的兼容,仍占4字节32位,而long被扩展到了8字节64位。
如下面的例子:

/foundation/communication/wifi/services/wifi_standard/wifi_framework/wifi_manage/idl_client/wifi_idl_client.cpp:879:41: warning: format specifies type 'int' but the argument has type 'std::__h::vector<int, std::__h::allocator<int> >::size_type' (aka 'unsigned long') [-Wformat]

    LOGD("start GetChipIds %{public}d", ids.size()); /* fixed compile error, -Werror,-Wunused-parameter */

                           ~~~~~~~~~~   ^~~~~~~~~~

                                                      %lu



解决办法有两个:1、改代码,消除Warning;2、改编译选项,压制相关的Warning。
尝试了一下,都有点行不通,改代码,地方太多了,而且也不知道怎么改好,大的改小了还是小的改大了。改编译选项,本来以为在\build\config\compiler\BUILD.gn中加入-Wno-error=format即可,但是实际上不行。
整个编译构建体系,不知道哪个小可爱在后面又加入了-Wall -Werror,如下图:


这种搞法真的是让人无所适从。


李传钊

962030@qq.com