作者:物联风景
在长期的 OpenHarmony教学过程中,发现经常会有学员被一些低级的,重复出现的错误所困扰。
有些是因为粗心,有些是对原理和机制理解不到位,而一遍一遍的讲解此种错误,不仅耗费巨量的时间,而且长此以往会消磨执教人员的耐性,变得易怒。
本篇就用来记录个种常见的错误,以供学员和各位初学者用来自查之用。
以下每种错误都非常典型,每个错误都配有截图和文字说明,一般对照来看可解决 90% 以上的新手入门问题,并会在后续的教学活动中持续改进,建议收藏。
①之前是好的,有一次输入 hb set 提示找不到 hb 工具
原因分析:没有在源码目录内执行,简单判断是否源码目录就看目录里面有没有一个 ohos_config.json 文件。
解决办法:cd 到源码所在目录内再执行 hb set。
知识点:执行 linux 指令的时候需要注意当前工作目录。
②提示:
Unable to load xxx
原因分析:在 BUILD.gn 内没有对应的目录,导致到不到该路径下的 BUILD.gn 文件。
解决办法:修改 BUILD.gn 内的目录名称或检查对应的名称有没有写错,如大小写,空格等问题,特别是有些学员会粗心大意,目录名称前有空格或者大写的 L 与 I 没有区分。
此时重命名就会发现:
知识点:BUILD.gn 内 deps 的写法,冒号前是文件夹名称。
③提示:
unresolved xxx dependencies … need by xxx
原因分析:在 BUILD.gn 同级的文件夹内的 BUILD.gn 声明的 static_library 名称与 deps 里面的不一致。
解决办法:修改 deps 内的冒号后面的库名称或者将文件夹内 BUILD.gn 声明的 static_library 改成与 deps 内一致。
知识点:deps 内冒号后面的内容是对应文件夹内的库名称。
补充知识:对于 deps 内的内容是出错的高危区,出现这种错误一般是对 deps 机制不理解导致,现用一图来说明 deps 到底改怎么写。
④提示:
ERROR at xxx/BUILD.gn:25:12: Assignment had no effect.
[OHOS INFO] source = [
原因分析:source 单词拼写错误,正确写法是 sources,同样的其他类似问题如下,也是单词拼写错误。
解决办法:将对应报错的单词改成正确的名称。
知识点:正确的名称为 sources 和 include_dirs,如下图:
推荐安装 gn 插件,有颜色提示,还可以方便进行快捷键注释,括号补全等操作。
在安装之前:
安装之后:
如果某一变量不是内置变量,则不能正确高亮:
⑤提示:?
ninja error: … needed by xxx.o, missing and unkonow rule to make it
原因分析:在 static_library 内的 sources 列表中将 .c 文件名写错了导致编译时候找不到对应的源文件。
解决办法:修改 sources 内的 c 文件名或者修改文件系统内的文件名使之与 sources 里的文件一致。
知识点:c 语言编译时依靠文件名寻找文件,对应的文件不存在则报错。
⑥提示某个符号未定义:undefined reference to xxx
原因分析:函数/变量名写错或调用一个根本不存在的函数/变量。
解决方式:将函数/变量名修改正确即可。
知识点:c 语言编译的相关知识。
⑦提示 too few arguments to function xxx
原因分析:c 语言函数参数个数传错。
解决方式:正确传入参数。
知识点:c 语言基础知识。
⑧提示 Expected comma between items.
原因分析:在 gn 中列表的两行数据没有用逗号隔开,如下:
解决方式:输入一个英文的逗号即可,建议:每一个列表项后面跟上一个逗号。
知识点:gn 的基础知识。
⑨提示 Replacing nonempty list.?
原因分析:尝试覆盖一个非空的列表,如下例:
解决方式:在下一个变量处使用+=即可解决,+=代表在后面追加。
知识点:gn 的基础知识。
⑩提示:?
fatal error: xxxx.h: No such file or directory
原因分析:在某个 c 文件里引用了某个头文件,但是没有在 include_dirs 里包含这个头文件的路径。
解决方式:在 include_dirs 内添加这个头文件即可,写在内部或使用+=在后面追加都行。
知识点:c 语言编译相关知识点。