遭遇OHOS编译错误及解决过程

换了一台机器编译openharmony,记录编译过程中遇到的错误及解决方法。

FALLTHROUGH错误

编译过程第三方库编译报错。查看日志,是因为配置了-Werror=implicit-fallthrough编译选项,导致原先的警告被作为错误处理。几种修改方案:

  1. 库的编译选项取消该选项
  2. 使用pragma
#pragma GCC diagnostic push			/* 入栈当前编译选项 */
#pragma GCC diagnostic ignored "-Werror=implicit-fallthrough"   /* 忽略FALLTHROUGH错误选项 */
    foo(b);         /* 忽略FALLTHROUGH错误选项的代码段 */
#pragma GCC diagnostic pop /* 弹出原编译选项 */

上述方法,同样适用于其他类似的临时忽略某些编译选项的场合。

  1. 使用 atttribut
    在需要FALLTHROUGH的代码,原先写break的位置加上__attribute__((fallthrought));
case 1:
	foo1();
	__attribute__((__fallthrought__));  /* 注意是两个括号 */
case xxx:
	...

Missing seperation, stop错误

网上搜了很久,有很多答案。

  1. dash未修改为bash
    解决方案:
sudo dpkg-reconfigure dash  #选择 NO

检查shell软链接,没有问题。

  1. Makefile格式中缩进使用空格对齐或TAB,文件中有非ASC字符的问题
    解决方案:编辑makefile,排除以上问题
    看了一下出错的工程makefile,缩进使用的是空格,但是编译通过的工程,也是同样的格式,基本可以排除这个问题。

  2. ninja、gn工具链和python版本的问题
    解决方案: 修改python、python3的链接目标,或这使用python版本管理工具
    检查了python, python3都指向相同的位置,和编译命令中的python位置是一致的的,基本可以排除此问题。

  3. 缺少可执行文件或库
    解决方案:安装对应的程序,并增加到$PATH,具体的问题需要从编译日志中排查。
    具体到此次的问题,错误日志

makefile 40 missing separator.stop:
...

上下文中没有明显的缺少内容的提示,这也是一开始没有往这方面考虑的主要原因。实在没办法了,才又回到原点,查看出错的makefile,对应上述信息的位置

$(foreach line,$(shell hb env | sed 's/\[OHOS INFO\]/ohos/g;s/ /_/g;s/:_/=/g' || true),$(eval $(line)))

其中有用到“hb env”。于是,赶紧看了一眼,赫然显示

Necessary package: bison, ccache, default-jdk, flex, ...
Installed package: bison, ccache, flex, ...
Uninstalled package: default-jdk, ...

按照以上要求,安装所需包,重新编译,通过。
本来官方编译环境搭建中,有要求安装上述库和程序,比如scons,但是在使用IDE中,这些库需要在IDE中重新再安装一遍。因此在搭建编译环境的过程中特意跳过了这几重复安装包,没想到就在这里翻车了。

关于Makefile的几个函数

上面的Makefile语句中用到了几个函数,简单记录一下涉及上述内容的用法。

foreach用法

遍历列表成员

foreach var, list,do

遍历列表list里面的每一个成员,用var代表,使用do对meige var完成操作。

sed 用法

查找替换,这里用管道操作代替了文件名

sed 's/old/new/g;s/old1/new1/op2' filename

sed 选项 ‘条件格式指令;条件格式指令’ 文件名,此处使用了替换指令s,查找全部(/g) old替换为new

eval 用法

把文本当做makefile指令执行

eval text

把text当做Makefile命令进行执行

通过所上述的Makefile指令,重新赋值了一些变量。

ohos_Necessary_package=bison,...
ohos_Installed_package=bison,...
ohos_Uninstalled_package=
ohos_root_path=...
ohos_board=...
ohos_kernel=...
ohos_product=...
ohos_product_path=...
ohos_device_path=...
ohos_device_company=...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值