在ubuntu-21.10上编译OHOS 3.1的坑 原创
liangkz_梁开祝
发布于 2022-5-17 19:18
浏览
3收藏
这两天我基于:VMware® Workstation 16 Player(16.2.1 build-18811642)+ ubuntu-21.10-desktop-amd64,重新搭建了一个编译环境,按官方指导给出的步骤安装完软件后,拉取一个干净的最新的3.1 Release代码回来。
编译轻量系统、小型系统没问题,直接编译RK3568项目,出现了一些编译异常,参考度娘的资料,做了一些修改后编译成功。我看了一下master分支代码,估计也会有类似问题,现把几个小坑放上来给大家做一下参考【++奇怪的是,大家都没有遇到这些异常吗?难道是我的编译环境还有些地方没配好??++】。
1. error: ‘size_t’ has not been declared
Line 351: /home/ohos/Ohos/A_LTS31/drivers/framework/tools/hdi-gen/util/string.h:23:32: error: ‘size_t’ has not been declared
......
Line 365: /home/ohos/Ohos/A_LTS31/drivers/framework/tools/hdi-gen/ast/ast_namespace.h:36:40: error: ‘size_t’ has not been declared
......
Line 392: /home/ohos/Ohos/A_LTS31/drivers/framework/tools/hdi-gen/util/string_builder.h:31:15: error: ‘size_t’ has not been declared
......
/home/ohos/Ohos/A_LTS31/drivers/framework/tools/hdi-gen/util/string_builder.cpp:27:9: error: ‘position_’ was not declared in this scope
27 | if (position_ + 1 >= capacity_) {
| ^~~~~~~~~
/home/ohos/Ohos/A_LTS31/drivers/framework/tools/hdi-gen/util/string_builder.cpp:27:26: error: ‘capacity_’ was not declared in this scope
27 | if (position_ + 1 >= capacity_) {
| ^~~~~~~~~
/home/ohos/Ohos/A_LTS31/drivers/framework/tools/hdi-gen/util/string_builder.cpp:33:13: error: ‘position_’ was not declared in this scope
33 | buffer_[position_] = c;
| ^~~~~~~~~
编译过程会出现大量的(过百条)上述异常。
度娘找到:Linux下编译C++出现的错误
据说这是因为在Linux系统下 g++ 没有C++的size_t
方案:需要在需要到size_t的文件中加入头文件 stdlib.h问题就解决了
因此,我在 //drivers/framework/tools/hdi-gen/util/string.h 文件头部增加一句:
#include <stdlib.h>
解决掉大部分的编译异常。
2. error: ‘islower’ was not declared in this scope
/home/ohos/Ohos/A_LTS31/drivers/framework/tools/hdi-gen/codegen/java_code_emitter.cpp:38:27: error: ‘islower’ was not declared in this scope
38 | if (name.IsEmpty() || islower(name[0])) {
| ^~~~~~~
/home/ohos/Ohos/A_LTS31/drivers/framework/tools/hdi-gen/codegen/java_code_emitter.cpp:41:35: error: ‘tolower’ was not declared in this scope
41 | return String::Format("%c%s", tolower(name[0]), name.Substring(1).string());
| ^~~~~~~
继续编译会出现几条上述异常,参考第1条的处理办法,在//drivers/framework/tools/hdi-gen/codegen/java_code_emitter.h 文件头部增加一句:
#include <ctype.h>
可以解决此类异常。
3.error: no member named ‘optional’ in namespace ‘std’
../../developtools/hiperf/include/callstack.h:102:67: error: no member named 'optional' in namespace 'std'
using dsoUnwDynInfoMap = std::unordered_map<std::string, std::optional<unw_dyn_info_t>>;
~~~~~^
../../developtools/hiperf/include/callstack.h:102:76: error: unexpected type name 'unw_dyn_info_t': expected expression
using dsoUnwDynInfoMap = std::unordered_map<std::string, std::optional<unw_dyn_info_t>>;
^
../../developtools/hiperf/include/callstack.h:103:31: error: use of undeclared identifier 'dsoUnwDynInfoMap'
std::unordered_map<pid_t, dsoUnwDynInfoMap> unwindDynInfoMap_;
^
继续编译会出现几条上述异常,在 //developtools/hiperf/include/callstack.h 文件头部增加一句:
#include <optional>
可以解决此类异常。
©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2022-5-17 19:18:25修改
赞
4
收藏 3
回复
相关推荐
昨天新拉master代码直接编译3568没出现error啊
ubuntu-21.10-desktop-amd64有可能是这个arm64上编译会报错
那有可能真是Ubuntu版本更新造成的一些兼容性问题~~
所以,OHOS的开发环境搭建,还真的是入门的绊脚石~~
确实是一堆报错, 新手,根本不知道如何解决;
新手还是建议严格按照官方给出的要求来做,Ubuntu就用20.04,不要用其他版本就可以了。
其次是多问度娘,我们遇到的问题,别人都肯定已经踩过坑了,在网上找不到解决办法,那么恭喜你,你可以为OpenHarmony做贡献了。
我选择入门到放弃;
[OHOS INFO] [297/2187] ACTION //ark/ts2abc/ts2panda:npm_run_build(//build/toolchain/linux:clang_x64)
[OHOS ERROR] [295/2187] ACTION //foundation/multimedia/medialibrary_standard/frameworks/innerkitsimpl/medialibrary_data_ability:medialibrary_dynamic_hap(//build/toolchain/ohos:ohos_clang_arm)
[OHOS ERROR] FAILED: obj/foundation/multimedia/medialibrary_standard/frameworks/innerkitsimpl/medialibrary_data_ability/Media_Library.hap
[OHOS ERROR] /usr/bin/env ../../build/scripts/hapbuilder.py --depfile gen/foundation/multimedia/medialibrary_standard/frameworks/innerkitsimpl/medialibrary_data_ability/medialibrary_dynamic_hap.d --hap-profile ../../foundation/multimedia/medialibrary_standard/frameworks/innerkitsimpl/medialibrary_data_ability/config.json --hapsigner ../../prebuilts/signcenter/hapsigntool/hapsigntoolv2.jar --hap-packing-tool ../../developtools/packing_tool/jar/app_packing_tool.jar --hap-path obj/foundation/multimedia/medialibrary_standard/frameworks/innerkitsimpl/medialibrary_data_ability/Media_Library.hap --packaged-resources obj/foundation/multimedia/medialibrary_standard/frameworks/innerkitsimpl/medialibrary_data_ability/medialibrary_dynamic_hap/resources.zip --packaged-js-assets obj/foundation/multimedia/medialibrary_standard/frameworks/innerkitsimpl/medialibrary_data_ability/medialibrary_dynamic_hap/js_assets.zip --assets=@FileArg\(gen/foundation/multimedia/medialibrary_standard/frameworks/innerkitsimpl/medialibrary_data_ability/medialibrary_dynamic_hap.metadata:root:assets\) --private-key-path OpenHarmony\ Application\ Release --sign-algo SHA256withECDSA --certificate-profile ../../foundation/multimedia/medialibrary_standard/frameworks/innerkitsimpl/signature/medialib.p7b --keyalias 123456 --keystore-path ../../prebuilts/signcenter/key/OpenHarmony.p12 --keystorepasswd 123456 --certificate-file ../../prebuilts/signcenter/certificates/OpenHarmonyApplication.pem --dso=@FileArg\(obj/foundation/multimedia/medialibrary_standard/frameworks/innerkitsimpl/medialibrary_data_ability/medialibrary_data_ability_module_info.json:source\)
[OHOS ERROR] Traceback (most recent call last):
[OHOS ERROR] File "../../build/scripts/hapbuilder.py", line 200, in <module>
[OHOS ERROR] sys.exit(main(sys.argv[1:]))
[OHOS ERROR] File "../../build/scripts/hapbuilder.py", line 185, in main
[OHOS ERROR] build_utils.call_and_write_depfile_if_stale(
[OHOS ERROR] File "/home/pengweijie/openharmony/build/scripts/util/build_utils.py", line 709, in call_and_write_depfile_if_stale
[OHOS ERROR] md5_check.call_and_record_if_stale(on_stale_md5,
[OHOS ERROR] File "/home/pengweijie/openharmony/build/scripts/util/md5_check.py", line 121, in call_and_record_if_stale
[OHOS ERROR] function(*args)
[OHOS ERROR] File "/home/pengweijie/openharmony/build/scripts/util/build_utils.py", line 699, in on_stale_md5
[OHOS ERROR] function(*args)
[OHOS ERROR] File "../../build/scripts/hapbuilder.py", line 186, in <lambda>
[OHOS ERROR] lambda: create_hap(options, options.hap_path),
[OHOS ERROR] File "../../build/scripts/hapbuilder.py", line 124, in create_hap
[OHOS ERROR] build_utils.check_output(packing_cmd)
[OHOS ERROR] File "/home/pengweijie/openharmony/build/scripts/util/build_utils.py", line 226, in check_output
[OHOS ERROR] child = subprocess.Popen(args,
[OHOS ERROR] File "/home/pengweijie/openharmony/prebuilts/python/linux-x86/3.8.5/lib/python3.8/subprocess.py", line 854, in __init__
[OHOS ERROR] self._execute_child(args, executable, preexec_fn, close_fds,
[OHOS ERROR] File "/home/pengweijie/openharmony/prebuilts/python/linux-x86/3.8.5/lib/python3.8/subprocess.py", line 1702, in _execute_child
[OHOS ERROR] raise child_exception_type(errno_num, err_msg, err_filename)
[OHOS ERROR] FileNotFoundError: [Errno 2] No such file or directory: 'java'
我和你是同一个3.1 Release的版本, 也遇到了你上面说的三个错误; 还多了上面一条,怎么处理
你的开发环境装有java没有?
$java --version
有没有Java的版本信息打印出来?
没有的话,安装一下:
$sudo apt install -y default-jre default-jdk ca-certificates-java
按照你的方法解决了这个问题;
后又出现 [OHOS ERROR] packages/phone/make-boot.sh: 行 22: genext2fs:未找到命令
解决办法:sudo apt install genext2fs
编译好了之后,还需要打包成img吗? 如果需要,我要怎么操作呢
编译成功了,会在out/packages/phone/images/目录下生成烧录镜像
楼主,我的报错跟你一模一样,到现在还在靠手动改代码解决,别人都没事,真是奇了怪了,我是完全按照官方文档一步步装的,我的ubuntu版本是20.04。楼主现在有找到更好的解决办法吗?然后我现在在3.2的环境下从没报过这个错,离了大谱。
编译一次需要多长时间啊