• OpenHarmony 4.0 Release 编译异常处理


    一、环境配置

    编译环境:Ubuntu 20.04
    OpenHarmony 软件版本:4.0 Release
    设备平台:rk3568

    二、下拉代码

    参考官网步骤:
    OpenHarmony 4.0 Release 源码获取

    repo init -u https://gitee.com/openharmony/manifest -b OpenHarmony-4.0-Release --no-repo-verify
    repo sync -c
    repo forall -c 'git lfs pull'
    
    • 1
    • 2
    • 3

    三、编译代码

    参考官网构建步骤:
    v4.0 Release 编译构建

     bash build/prebuilts_download.sh
    ./build.sh --product-name rk3568 --ccache
    
    • 1
    • 2

    如果上述步骤一切顺利,编译通过,build log如下:

    ...
    Please modify according to README.md
    [OHOS INFO] rk3568 build success
    [OHOS INFO] Cost time:  0:58:44
    =====build  successful=====
    2023-11-08 14:48:55
    ++++++++++++++++++++++++++++++++++++++++
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    四、下拉及编译中遇到的问题

    4.1、repo: error: unable to resolve “fork_flow”

    下拉代码执行报错

    $ repo init -u https://gitee.com/openharmony/manifest -b master --no-repo-verify
    Downloading Repo source from https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/
    remote: Enumerating objects: 4885, done.
    remote: Counting objects: 100% (4885/4885), done.
    remote: Compressing objects: 100% (2425/2425), done.
    remote: Total 8626 (delta 4312), reused 2460 (delta 2460), pack-reused 3741
    Receiving objects: 100% (8626/8626), 4.16 MiB | 9.25 MiB/s, done.
    Resolving deltas: 100% (5577/5577), done.
    repo: warning: verification of repo code has been disabled;
    repo will not be able to verify the integrity of itself.
    
    repo: error: unable to resolve "fork_flow"
    fatal: cloning the git-repo repository failed, will remove '.repo/repo'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    unable to resolve “fork_flow”" 表明repo工具无法解析名为 “fork_flow”,实际上fork_flow是repo仓库的一个分支
    repo源码:开源中国/repo
    解决方案:修改REPO_REV默认值为stable

    $ which repo	#查看repo安装路径
    /home/xxx/bin/repo
    
    $ sudo vim /home/xxx/bin/repo 
    #REPO_REV = 'fork_flow' 改为 REPO_REV = 'stable' 
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4.2 ERROR: HTTP error 404 while getting http://repo.huaweicloud.com/repository/pypi/…

    执行bash build/prebuilts_download.sh后出现如下报错

    $ bash build/prebuilts_download.sh 
    Defaulting to user installation because normal site-packages is not writeable
    Looking in indexes: http://repo.huaweicloud.com/repository/pypi/simple
    Collecting rich
      Obtaining dependency information for rich from http://repo.huaweicloud.com/repository/pypi/packages/8d/5f/21a93b2ec205f4b79853ff6e838e3c99064d5dbe85ec6b05967506f14af0/rich-13.5.2-py3-none-any.whl.metadata
      ERROR: HTTP error 404 while getting http://repo.huaweicloud.com/repository/pypi/packages/8d/5f/21a93b2ec205f4b79853ff6e838e3c99064d5dbe85ec6b05967506f14af0/rich-13.5.2-py3-none-any.whl.metadata
    ERROR: 404 Client Error: Not Found for url: http://repo.huaweicloud.com/repository/pypi/packages/8d/5f/21a93b2ec205f4b79853ff6e838e3c99064d5dbe85ec6b05967506f14af0/rich-13.5.2-py3-none-any.whl.metadata
    prebuilts_download start
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    无效url:http://repo.huaweicloud.com/repository/pypi/packages/…
    解决方案:
    使用其他国内(清华)镜像源替换华为的pypi源,修改如下:

    # build/prebuilts_download.sh
    -    pypi_url='http://repo.huaweicloud.com/repository/pypi/simple'
    +    pypi_url='https://pypi.tuna.tsinghua.edu.cn/simple'
    
    • 1
    • 2
    • 3

    4.3 一直卡在start npm install, please wait.

    执行bash build/prebuilts_download.sh后一直卡在start npm install, please wait.
    分析prebuilts_download.sh代码发现是npm源的问题,于是替换npm默认url
    解决方案:
    使用国内(淘宝)镜像源替换华为npm源,修改如下:

    # build/prebuilts_download.py
    -    parser.add_argument('--npm-registry', default='https://repo.huaweicloud.com/repository/npm/',
    +    parser.add_argument('--npm-registry', default='https://registry.npm.taobao.org/',
    
    • 1
    • 2
    • 3

    4.4 ld.lld: error: undefined symbol: __aarch64_cas4_acq_rel…raise OHOSException(‘ninja phase failed’, ‘4000’)

    详细报错如下:

    [OHOS ERROR] ld.lld: error: undefined symbol: __aarch64_cas4_acq_rel
    [OHOS ERROR] >>> referenced by hdf_vnode_adapter.c:294 (/home/xxx/OHOS/OpenHarmony_master/out/kernel/OBJ/linux-5.10/../../../../drivers/hdf_core/framework/core/adapter/vnode/src/hdf_vnode_adapter.c:294)
    [OHOS ERROR] >>> vmlinux.o:(HdfVNodeAdapterIoctl)
    [OHOS ERROR] >>> referenced by hdf_vnode_adapter.c:303 (/home/xxx/OHOS/OpenHarmony_master/out/kernel/OBJ/linux-5.10/../../../../drivers/hdf_core/framework/core/adapter/vnode/src/hdf_vnode_adapter.c:303)
    [OHOS ERROR] >>> vmlinux.o:(HdfVNodeAdapterIoctl)
    [OHOS ERROR] >>> referenced by hdf_vnode_adapter.c:428 (/home/xxx/OHOS/OpenHarmony_master/out/kernel/OBJ/linux-5.10/../../../../drivers/hdf_core/framework/core/adapter/vnode/src/hdf_vnode_adapter.c:428)
    [OHOS ERROR] >>> vmlinux.o:(HdfDeviceSendEventToClient)
    [OHOS ERROR] >>> referenced 1 more times
    [OHOS ERROR] BTF .btf.vmlinux.bin.o
    [OHOS ERROR] pahole: .tmp_vmlinux.btf: No such file or directory
    [OHOS ERROR] LD .tmp_vmlinux.kallsyms1
    [OHOS ERROR] ld.lld: error: .btf.vmlinux.bin.o: unknown file type
    [OHOS ERROR] make[2]: *** [/home/xxx/OHOS/OpenHarmony_master/out/kernel/src_tmp/linux-5.10/Makefile:1236: vmlinux] Error 1
    [OHOS ERROR] make[1]: *** [arch/arm64/Makefile:208: rk3568-toybrick-x0-linux.img] Error 2
    [OHOS ERROR] make[1]: Leaving directory '/home/xxx/OHOS/OpenHarmony_master/out/kernel/OBJ/linux-5.10'
    [OHOS ERROR] make: *** [Makefile:192: __sub-make] Error 2
    [OHOS ERROR] Traceback (most recent call last):
    [OHOS ERROR] File "/home/xxx/OHOS/OpenHarmony_master/build/hb/services/ninja.py", line 70, in _execute_ninja_cmd
    [OHOS ERROR] SystemUtil.exec_command(
    [OHOS ERROR] File "/home/xxx/OHOS/OpenHarmony_master/build/hb/util/system_util.py", line 64, in exec_command
    [OHOS ERROR] raise OHOSException(
    [OHOS ERROR] exceptions.ohos_exception.OHOSException: Please check build log in /home/xxx/OHOS/OpenHarmony_master/out/rk3568/build.log
    [OHOS ERROR]
    [OHOS ERROR] During handling of the above exception, another exception occurred:
    [OHOS ERROR]
    [OHOS ERROR] Traceback (most recent call last):
    [OHOS ERROR] File "/home/xxx/OHOS/OpenHarmony_master/build/hb/containers/status.py", line 47, in wrapper
    [OHOS ERROR] return func(args, **kwargs)
    [OHOS ERROR] File "/home/xxx/OHOS/OpenHarmony_master/build/hb/modules/ohos_build_module.py", line 67, in run
    [OHOS ERROR] raise exception
    [OHOS ERROR] File "/home/xxx/OHOS/OpenHarmony_master/build/hb/modules/ohos_build_module.py", line 65, in run
    [OHOS ERROR] super().run()
    [OHOS ERROR] File "/home/xxx/OHOS/OpenHarmony_master/build/hb/modules/interface/build_module_interface.py", line 72, in run
    [OHOS ERROR] raise exception
    [OHOS ERROR] File "/home/xxx/OHOS/OpenHarmony_master/build/hb/modules/interface/build_module_interface.py", line 70, in run
    [OHOS ERROR] self._target_compilation()
    [OHOS ERROR] File "/home/xxx/OHOS/OpenHarmony_master/build/hb/modules/ohos_build_module.py", line 103, in _target_compilation
    [OHOS ERROR] self.target_compiler.run()
    [OHOS ERROR] File "/home/xxx/OHOS/OpenHarmony_master/build/hb/services/ninja.py", line 38, in run
    [OHOS ERROR] self._execute_ninja_cmd()
    [OHOS ERROR] File "/home/xxx/OHOS/OpenHarmony_master/build/hb/services/ninja.py", line 77, in _execute_ninja_cmd
    [OHOS ERROR] raise OHOSException('ninja phase failed', '4000')
    [OHOS ERROR] exceptions.ohos_exception.OHOSException: ninja phase failed
    [OHOS ERROR]
    [OHOS ERROR] Code: 4000
    [OHOS ERROR]
    [OHOS ERROR] Reason: ninja phase failed
    [OHOS ERROR]
    [OHOS ERROR] Solution: Please check the compile log at out/{compiling product}/build.log, If you could analyze build logs.
    [OHOS ERROR] Or you can try the following steps to solve this problem:
    [OHOS ERROR] 1. cd to OHOS root path
    [OHOS ERROR] 2. run 'hb clean --all' or 'rm -rf out build/resources/args/.json'.
    [OHOS ERROR] 3. repo sync
    [OHOS ERROR] 4. repo forall -c 'git lfs pull'
    [OHOS ERROR] 5. bash build/prebuilts_download.sh
    [OHOS ERROR] 6. rebuild your product or component
    [OHOS ERROR] 7. check if any environment variables required by the building process are not set in build/compile_env_allowlist.json
    [OHOS ERROR]
    [OHOS ERROR] If you still cannot solve this problem, you could post this problem on:
    [OHOS ERROR] https://gitee.com/openharmony/build/issues
    [OHOS ERROR]
    =====build error=====
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62

    先从出现ERROR开始处分析一遍报错log,若无明显代码报错,可尝试:

    sudo ./build.sh -p rk3568
    
    • 1

    sudo 命令在共用编译服务器慎用,以免影响其他人的编译环境。
    若使用sudo编译通过,则说明与编译环境有关,可从以下几个方面处理:

  • 相关阅读:
    Springboot发送邮件
    [线程与网络] 网络编程与通信原理(四):深入理解传输层UDP与TCP协议
    c++ set、map的四种自定义排序方法
    LeetCode-day14-521. 最长特殊序列 Ⅰ
    RK3588开发笔记-USB3.0接口调试
    Integer缓存到底有啥问题?
    解析Spring Boot中的CommandLineRunner和ApplicationRunner:用法、区别和适用场景详解
    南瓜科学好奇盒子上新 打造新时代玩具总动员
    前端基础HTML-基础标签
    【C++】不用include,使用C++模块语法实现函数调用
  • 原文地址:https://blog.csdn.net/supernova_TOP/article/details/134290292