From 5b2044df70be812a9c977da98418cfffa555b951 Mon Sep 17 00:00:00 2001 From: We-unite <3205135446@qq.com> Date: Tue, 19 Nov 2024 19:11:11 +0800 Subject: Addd more to ohos compile --- code/projects/ohos_compile.html | 226 ++++++++++++++++++++++++++++++++++------ code/projects/ohos_compile.md | 194 +++++++++++++++++++++++++++++----- common/script4works.html | 2 +- common/script4works.js | 2 +- 4 files changed, 369 insertions(+), 55 deletions(-) diff --git a/code/projects/ohos_compile.html b/code/projects/ohos_compile.html index bf72035..fd52643 100644 --- a/code/projects/ohos_compile.html +++ b/code/projects/ohos_compile.html @@ -5,20 +5,17 @@ - OpenHarmony 3.2 编译 - - - + OHOS全量编译记录 + + +
-
-

OpenHarmony 3.2 编译

-
+

OHOS 全量编译记录

-

[toc]

本次编译环境搭建参考了以下博客:

    @@ -39,7 +36,8 @@

    硬件环境

    编译过程使用的是 Ubuntu,经测试,Ubuntu 22.04 LTS/Ubuntu 20.04 LTS/Ubuntu 18.04 LTS - 均可用。

    + 均可用。 +

    网上的大多数博客里没有对编译的硬件限制作出说明,现根据我们的情况,给出一个大概的范围:

    • 内存必须在 10G 以上,我使用的是 13G,编译成功(8G 时编译失败了,下文会说明)
    • @@ -109,39 +107,45 @@ ssh-keygen -t rsa -C "your-email-address"

      此时,我们就可以通过 ssh 的方式与 gitee 进行交互、也可以免密提交代码了。

      系统源码编译

      配置 repo 工具

      -

      注意:前两条命令需要以 root 身份执行!!!

      -
      # 以下两条命令需要以root身份执行
      -sudo -s
      -curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/repo
      -chmod a+x /usr/local/bin/repo
      -exit
      +            
      curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > ~/repo
      +chmod a+x ~/repo
      +sudo mv ~/repo /usr/local/bin/repo
      +sudo chown root:root /usr/local/bin/repo
       
      -# 这条普通身份也可以
       pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests
      -

      之所以前两条命令需要以 root 身份而不能是 sudo,是因为/usr/local/bin是一个只有 root 用户才有写权限的目录,而 sudo 命令虽然是以 root +

      需要注意的是,不能直接使用 sudo 搭配管道,这是因为/usr/local/bin是一个只有 root 用户才有写权限的目录,而 sudo 命令虽然是以 root 身份执行,但重定向时候 sudo 用的也是当前用户身份,权限不足,自然报错。(如果是管道,那么 sudo 也是只对当前命令有效,而不是对后续的整个管道有效。

      获取源码

      +

      这里需要注意的是,一般情况下最好使用带有 v 和 Release 的版本。不带 Release 不是发布版,会随时更新代码,容易编译出错;带 Release 的也有两种 tag,是带 v 和不带 v + 的区别,如OpenHarmony-v4.0-ReleaseOpenHarmony-4.0-Release。二者的区别主要在于,不带 v + 的是官方维护的稳定版,也会更新代码,厂商的补丁一般只针对带 v 的使用。

      通过 repo + https/ssh 下载:

      -
      # 通过http下载,这里需要注意你需要的ohos的版本
      -repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify
      -# 如果需要的是特定分支,-b后边改成对应分支名
      +            
      # 如果需要的是特定分支,-b后边改成对应分支名
      +# repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify
       # 如果是tag,-b后的参数比较复杂,要在网页上提前确定好需要的tag名字,
       # 如下载的是tag为OpenHarmony-v3.2-Release的版本,命令如下:
       # repo init -u https://gitee.com/openharmony/manifest -b refs/tags/OpenHarmony-v3.2-Release --no-repo-verify
       # 除使用https外,也可以通过ssh下载
       # repo init -u git@gitee.com:openharmony/manifest.git -b master --no-repo-verify
      -
      +repo init -u https://gitee.com/openharmony/manifest -b refs/tags/OpenHarmony-v4.0-Release --no-repo-verify
       repo sync -c
       repo forall -c 'git lfs pull'
      -

      prebuilts 与编译

      +

      补丁与编译

      +

      首先,打上厂商的补丁。下载对应版本补丁后,将补丁文件放到源码根目录下,执行:

      +
      unzip purple_pi_oh_patch.zip
      +cd purple_pi_oh_patch
      +./ido_patch.sh
      +

      看到patch complete字样,说明补丁成功。接下来进行 prebuilts 和编译:

      # 先在源码根目录下执行脚本,安装编译器及二进制工具
       bash build/prebuilts_download.sh
      -# 再执行如下命令进行版本编译
      +
      +# 编译
       # 注意:默认编译的时候,目标cpu是32位,即使为64位cpu也无法使用64位功能
      -sudo ./build.sh --product-name rk3568 --ccache
       # 如果是64位cpu,需要加上--target-cpu=arm64
      -sudo ./build.sh --product-name rk3568 --ccache --target-cpu=arm64
      +# 编译rk3568时 +# sudo ./build.sh --product-name rk3568 --ccache --target-cpu=arm64 +sudo ./build.sh --product-name purple_pi_oh --ccache --no-prebuilt-sdk --target-cpu=arm64

      编译完成

      编译所生成的文件都归档在 out 目录下,结果镜像输出在源码根目录下的out/rk3568/packages/phone/images目录下。

      自此源码编译成功,即可进行镜像烧录。

      @@ -181,14 +185,75 @@ sudo ./build.sh --product-name rk3568 --ccache --target-cpu=arm64
      sudo mount -o remount -rw / sudo mount -o remount -rw /var/snap/firefox/common/host-hunspell

      而后在 gparted 中点击gparted->刷新设备,即可进行分区扩展。

      +

      Ninja 编译报错 Code 4000

      +

      编译 rk3568 过程中可能会出现以下报错:

      +
      [OHOS ERROR] Code: 4000
      +[OHOS ERROR] Reason: ninja phase failed
      +

      详细的报错信息已经丢失,将就着看吧。反正别的办法都不好使的时候试试这个。

      +

      此时执行以下内容即可:

      +
      rm -rf out
      +sed -i 's/CONFIG_DEBUG_INFO_BTF=y/# CONFIG_DEBUG_INFO_BTF=y/g' kernel/linux/config/linux-5.10/rk3568/arch/arm64_defconfig
      +

      而后重新编译。

      +

      另一个Code 4000

      +

      编译时报错如下:

      +
      ninja: build stopped: subcommand failed.
      +[OHOS ERROR] Traceback (most recent call last):
      +[OHOS ERROR]   File "/home/player/Desktop/ohos/src/build/hb/services/ninja.py", line 49, in _execute_ninja_cmd
      +[OHOS ERROR]     SystemUtil.exec_command(
      +[OHOS ERROR]   File "/home/player/Desktop/ohos/src/build/hb/util/system_util.py", line 63, in exec_command
      +[OHOS ERROR]     raise OHOSException(
      +[OHOS ERROR] exceptions.ohos_exception.OHOSException: Please check build log in /home/player/Desktop/ohos/src/out/purple_pi_oh/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/player/Desktop/ohos/src/build/hb/containers/status.py", line 47, in wrapper
      +[OHOS ERROR]     return func(*args, **kwargs)
      +[OHOS ERROR]   File "/home/player/Desktop/ohos/src/build/hb/modules/ohos_build_module.py", line 67, in run
      +[OHOS ERROR]     raise exception
      +[OHOS ERROR]   File "/home/player/Desktop/ohos/src/build/hb/modules/ohos_build_module.py", line 65, in run
      +[OHOS ERROR]     super().run()
      +[OHOS ERROR]   File "/home/player/Desktop/ohos/src/build/hb/modules/interface/build_module_interface.py", line 72, in run
      +[OHOS ERROR]     raise exception
      +[OHOS ERROR]   File "/home/player/Desktop/ohos/src/build/hb/modules/interface/build_module_interface.py", line 70, in run
      +[OHOS ERROR]     self._target_compilation()
      +[OHOS ERROR]   File "/home/player/Desktop/ohos/src/build/hb/modules/ohos_build_module.py", line 103, in _target_compilation
      +[OHOS ERROR]     self.target_compiler.run()
      +[OHOS ERROR]   File "/home/player/Desktop/ohos/src/build/hb/services/ninja.py", line 38, in run
      +[OHOS ERROR]     self._execute_ninja_cmd()
      +[OHOS ERROR]   File "/home/player/Desktop/ohos/src/build/hb/services/ninja.py", line 52, 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]
      +[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]
      +

      在报错信息之上,还有很多很多行,大致意思是正在对某些文件或仓库拉补丁,输出了补丁的 commit 信息。报错中最后提示的解决办法其实是无效的,我全量删除源码、甚至重装虚拟机,都还会遇到这个问题。

      +

      仔细分析报错信息,发现报错的根本原因是在 python 中处理一个 Exception 时,又抛出了另一个 + Exception,导致程序异常终止。上网搜索可知,这种问题的一般原因是 python + 同时拉取或爬取大量网页内容,但都失败了,导致同时出现两个异常,程序崩溃。具体到我们这里,问题就是拉补丁失败了,我检查了一下我的网络环境,发现我挂着梯子,梯子质量不是那么好。尝试将梯子关掉后,再次编译,问题解决。 +

      一个奇怪的报错——GN Failed

      这是一个很奇怪的报错,我们尚未找到真正的原因所在,只知道如何暂时地绕过去。

      问题描述与复现

      问题复现方法为在编译过程中,执行以下命令:

      ./build.sh --product-name rk3568 --ccache

      该命令是指导书中写的编译命令,但执行时候会出错;与上文所述的经确认无误的编译命令不同在于没加sudo

      -

      如果按照指导书的命令来,不出意外编译将会报错: -

      +

      如果按照指导书的命令来,不出意外编译将会报错:

      以下是该问题的具体描述:

      build.log如下:

      Set cache size limit to 100.0 GB
      @@ -311,6 +376,109 @@ sudo apt-get install libxcursor-dev libxrandr-dev libxinerama-dev
                   

      将编译出来的 NDK 的 zip 解压到你想要的目录下,然后将该目录添加到环境变量中,即可使用。

      注意,NDK 包提供的交叉编译工具是 cmake 和 ninja,编译器是 clang 和 clang++,并没有我们熟悉的 gcc/g++和 make。除此之外,NDK 还未我们提供编译所需的全套服务,如编译工具链配置文件ohos.toolchain.cmake、头文件、库文件等。快说,谢谢 ohos~

      +

      为了更方便地使用 NDK,鄙人不才,写了两个脚本,分别用于 cmake 编译和单文件编译:

      +
      #!/bin/bash
      +
      +#######################################################################
      +# File Name    : compile.sh
      +# Encoding     : utf-8
      +# Author       : We-unite
      +# Email        : weunite1848@gmail.com
      +# Created Time : 2024-11-18 15:19:15
      +#######################################################################
      +
      +set -e
      +
      +if [ $UID -eq 0 ]; then
      +    echo "Please do not run this script as root"
      +    exit 1
      +fi
      +
      +if [ $# -ne 2 ]; then
      +    echo "Usage: $0 <static|shared> <v7|v8>"
      +    exit 1
      +fi
      +
      +if [ $2 == "v8" ]; then
      +    arch=arm64-v8a
      +elif [ $2 == "v7" ]; then
      +    arch=armeabi-v7a
      +else
      +    echo "Invalid architecture: $2"
      +    exit 1
      +fi
      +
      +link=$1 # static or shared
      +native_path=~/app/native
      +
      +export PATH=$native_path/build-tools/cmake/bin:$PATH
      +
      +# 使用cmake编译,编译生成的文件运行在rk3568上
      +cmake -B build -D OHOS_STL=c++_$link -D OHOS_ARCH=$arch \ 
      +    -D OHOS_PLATFORM=OHOS \ 
      +    -D CMAKE_TOOLCHAIN_FILE=$(find $native_path -name ohos.toolchain.cmake)
      +cmake --build build
      +
      #!/bin/bash
      +
      +#######################################################################
      +# File Name    : compile-tiny.sh
      +# Encoding     : utf-8
      +# Author       : We-unite
      +# Email        : weunite1848@gmail.com
      +# Created Time : 2024-11-16 13:06:58
      +#######################################################################
      +
      +set -e
      +# 如果是root,报错
      +if [ $(id -u) -eq 0 ]; then
      +    echo "Do not run as root"
      +    exit 1
      +fi
      +
      +if [ $# -ne 2 ]; then
      +    echo "Usage: $0 <src file> [armv8-a|armv7-a]"
      +    exit 1
      +fi
      +
      +native=~/app/native
      +file=$1
      +targetFile=${file%.*}
      +arch=$2
      +
      +case $arch in
      +    armv8-a)
      +        compiler=$native/llvm/bin/aarch64-unknown-linux-ohos
      +        targetPlatform=aarch64-linux-ohos
      +        ;;
      +    armv7-a)
      +        compiler=$native/llvm/bin/armv7-unknown-linux-ohos
      +        targetPlatform=arm-linux-ohos
      +        ;;
      +    *)
      +        echo "Unsupported arch"
      +        exit 1
      +        ;;
      +esac
      +
      +case ${file##*.} in
      +    c)
      +        compiler=$compiler-clang
      +        ;;
      +    cpp)
      +        compiler=$compiler-clang++
      +        ;;
      +    *)
      +        echo "Unsupported file type"
      +        exit 1
      +        ;;
      +esac
      +
      +export CPATH=
      +
      +$compiler -o $targetFile $file -Wall \
      +    --target=$targetPlatform \
      +    --sysroot=$native/sysroot \
      +    -march=$arch -mfloat-abi=softfp

      完结撒花

      本次鸿蒙开发环境的搭建过程可谓一波三折,总结几个最大的坑点,或许可以作为编译的经验罢:

        @@ -323,8 +491,8 @@ sudo apt-get install libxcursor-dev libxrandr-dev libxinerama-dev

      不说了,抓紧攒点钱开学升级电脑配置要紧……磁盘快炸了……

      -

      2024.2.12,甲辰年正月初三
      2024.4.24改

      - +

      2024.2.12,甲辰年正月初三
      2024.4.24改
      2024.11.19改

      +
diff --git a/code/projects/ohos_compile.md b/code/projects/ohos_compile.md index 150ee25..4672027 100644 --- a/code/projects/ohos_compile.md +++ b/code/projects/ohos_compile.md @@ -1,7 +1,5 @@ -[toc] - > 本次编译环境搭建参考了以下博客: > > - [HiHope_DAYU200/开发环境搭建编译指南](https://gitee.com/hihope_iot/docs/blob/master/HiHope_DAYU200/%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA%E7%BC%96%E8%AF%91%E6%8C%87%E5%8D%97.md) @@ -103,49 +101,58 @@ ssh-keygen -t rsa -C "your-email-address" ## 配置 repo 工具 -**注意:前两条命令需要以 root 身份执行!!!** - ```bash -# 以下两条命令需要以root身份执行 -sudo -s -curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/repo -chmod a+x /usr/local/bin/repo -exit +curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > ~/repo +chmod a+x ~/repo +sudo mv ~/repo /usr/local/bin/repo +sudo chown root:root /usr/local/bin/repo -# 这条普通身份也可以 pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests ``` -之所以前两条命令需要以 root 身份而不能是 sudo,是因为`/usr/local/bin`是一个只有 root 用户才有写权限的目录,而 sudo 命令虽然是以 root 身份执行,但**重定向时候 sudo 用的也是当前用户身份**,权限不足,自然报错。(**如果是管道,那么 sudo 也是只对当前命令有效,而不是对后续的整个管道有效。**) +需要注意的是,不能直接使用 sudo 搭配管道,这是因为`/usr/local/bin`是一个只有 root 用户才有写权限的目录,而 sudo 命令虽然是以 root 身份执行,但**重定向时候 sudo 用的也是当前用户身份**,权限不足,自然报错。(**如果是管道,那么 sudo 也是只对当前命令有效,而不是对后续的整个管道有效。**) ## 获取源码 +这里需要注意的是,一般情况下最好使用带有 v 和 Release 的版本。不带 Release 不是发布版,会随时更新代码,容易编译出错;带 Release 的也有两种 tag,是带 v 和不带 v 的区别,如`OpenHarmony-v4.0-Release`和`OpenHarmony-4.0-Release`。二者的区别主要在于,不带 v 的是官方维护的稳定版,也会更新代码,厂商的补丁一般只针对带 v 的使用。 + 通过 repo + https/ssh 下载: ```bash -# 通过http下载,这里需要注意你需要的ohos的版本 -repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify # 如果需要的是特定分支,-b后边改成对应分支名 +# repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify # 如果是tag,-b后的参数比较复杂,要在网页上提前确定好需要的tag名字, # 如下载的是tag为OpenHarmony-v3.2-Release的版本,命令如下: # repo init -u https://gitee.com/openharmony/manifest -b refs/tags/OpenHarmony-v3.2-Release --no-repo-verify # 除使用https外,也可以通过ssh下载 # repo init -u git@gitee.com:openharmony/manifest.git -b master --no-repo-verify - +repo init -u https://gitee.com/openharmony/manifest -b refs/tags/OpenHarmony-v4.0-Release --no-repo-verify repo sync -c repo forall -c 'git lfs pull' ``` -## prebuilts 与编译 +## 补丁与编译 + +首先,打上厂商的补丁。下载对应版本补丁后,将补丁文件放到源码根目录下,执行: + +```bash +unzip purple_pi_oh_patch.zip +cd purple_pi_oh_patch +./ido_patch.sh +``` + +看到`patch complete`字样,说明补丁成功。接下来进行 prebuilts 和编译: ```bash # 先在源码根目录下执行脚本,安装编译器及二进制工具 bash build/prebuilts_download.sh -# 再执行如下命令进行版本编译 + +# 编译 # 注意:默认编译的时候,目标cpu是32位,即使为64位cpu也无法使用64位功能 -sudo ./build.sh --product-name rk3568 --ccache # 如果是64位cpu,需要加上--target-cpu=arm64 -sudo ./build.sh --product-name rk3568 --ccache --target-cpu=arm64 +# 编译rk3568时 +# sudo ./build.sh --product-name rk3568 --ccache --target-cpu=arm64 +sudo ./build.sh --product-name purple_pi_oh --ccache --no-prebuilt-sdk --target-cpu=arm64 ``` ## 编译完成 @@ -195,6 +202,82 @@ sudo mount -o remount -rw /var/snap/firefox/common/host-hunspell 而后在 gparted 中点击`gparted->刷新设备`,即可进行分区扩展。 +## Ninja 编译报错 `Code 4000` + +编译 rk3568 过程中可能会出现以下报错: + +```plaintext +[OHOS ERROR] Code: 4000 +[OHOS ERROR] Reason: ninja phase failed +``` + +详细的报错信息已经丢失,将就着看吧。反正别的办法都不好使的时候试试这个。 + +此时执行以下内容即可: + +```bash +rm -rf out +sed -i 's/CONFIG_DEBUG_INFO_BTF=y/# CONFIG_DEBUG_INFO_BTF=y/g' kernel/linux/config/linux-5.10/rk3568/arch/arm64_defconfig +``` + +而后重新编译。 + +## 另一个`Code 4000` + +编译时报错如下: + +```plaintext +ninja: build stopped: subcommand failed. +[OHOS ERROR] Traceback (most recent call last): +[OHOS ERROR] File "/home/player/Desktop/ohos/src/build/hb/services/ninja.py", line 49, in _execute_ninja_cmd +[OHOS ERROR] SystemUtil.exec_command( +[OHOS ERROR] File "/home/player/Desktop/ohos/src/build/hb/util/system_util.py", line 63, in exec_command +[OHOS ERROR] raise OHOSException( +[OHOS ERROR] exceptions.ohos_exception.OHOSException: Please check build log in /home/player/Desktop/ohos/src/out/purple_pi_oh/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/player/Desktop/ohos/src/build/hb/containers/status.py", line 47, in wrapper +[OHOS ERROR] return func(*args, **kwargs) +[OHOS ERROR] File "/home/player/Desktop/ohos/src/build/hb/modules/ohos_build_module.py", line 67, in run +[OHOS ERROR] raise exception +[OHOS ERROR] File "/home/player/Desktop/ohos/src/build/hb/modules/ohos_build_module.py", line 65, in run +[OHOS ERROR] super().run() +[OHOS ERROR] File "/home/player/Desktop/ohos/src/build/hb/modules/interface/build_module_interface.py", line 72, in run +[OHOS ERROR] raise exception +[OHOS ERROR] File "/home/player/Desktop/ohos/src/build/hb/modules/interface/build_module_interface.py", line 70, in run +[OHOS ERROR] self._target_compilation() +[OHOS ERROR] File "/home/player/Desktop/ohos/src/build/hb/modules/ohos_build_module.py", line 103, in _target_compilation +[OHOS ERROR] self.target_compiler.run() +[OHOS ERROR] File "/home/player/Desktop/ohos/src/build/hb/services/ninja.py", line 38, in run +[OHOS ERROR] self._execute_ninja_cmd() +[OHOS ERROR] File "/home/player/Desktop/ohos/src/build/hb/services/ninja.py", line 52, 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] +[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] +``` + +在报错信息之上,还有很多很多行,大致意思是正在对某些文件或仓库拉补丁,输出了补丁的 commit 信息。报错中最后提示的解决办法其实是无效的,我全量删除源码、甚至重装虚拟机,都还会遇到这个问题。 + +仔细分析报错信息,发现报错的根本原因是在 python 中**处理一个 Exception 时,又抛出了另一个 Exception,导致程序异常终止**。上网搜索可知,这种问题的一般原因是 python 同时拉取或爬取大量网页内容,但都失败了,导致同时出现两个异常,程序崩溃。具体到我们这里,问题就是拉补丁失败了,我检查了一下我的网络环境,发现我挂着梯子,梯子质量不是那么好。尝试将梯子关掉后,再次编译,问题解决。 + ## 一个奇怪的报错——`GN Failed` 这是一个很奇怪的报错,我们尚未找到真正的原因所在,只知道如何暂时地绕过去。 @@ -361,18 +444,18 @@ sudo apt-get install libxcursor-dev libxrandr-dev libxinerama-dev 注意,NDK 包提供的交叉编译工具是 cmake 和 ninja,编译器是 clang 和 clang++,并没有我们熟悉的 gcc/g++和 make。除此之外,NDK 还未我们提供编译所需的全套服务,如编译工具链配置文件`ohos.toolchain.cmake`、头文件、库文件等。快说,谢谢 ohos~ -为了更方便地使用NDK,鄙人不才,写了两个脚本,分别用于cmake编译和单文件编译: +为了更方便地使用 NDK,鄙人不才,写了两个脚本,分别用于 cmake 编译和单文件编译: ```bash #!/bin/bash -########################################################################## +####################################################################### # File Name : compile.sh # Encoding : utf-8 # Author : We-unite # Email : weunite1848@gmail.com -# Created Time : 2024-02-29 15:19:15 -########################################################################## +# Created Time : 2024-11-18 15:19:15 +####################################################################### set -e @@ -401,11 +484,74 @@ native_path=~/app/native export PATH=$native_path/build-tools/cmake/bin:$PATH # 使用cmake编译,编译生成的文件运行在rk3568上 -cmake -B build -D OHOS_STL=c++_$link -D OHOS_ARCH=$arch -D OHOS_PLATFORM=OHOS -D CMAKE_TOOLCHAIN_FILE=$(find $native_path -name ohos.toolchain.cmake) +cmake -B build -D OHOS_STL=c++_$link -D OHOS_ARCH=$arch \ + -D OHOS_PLATFORM=OHOS \ + -D CMAKE_TOOLCHAIN_FILE=$(find $native_path -name ohos.toolchain.cmake) cmake --build build ``` ```bash +#!/bin/bash + +####################################################################### +# File Name : compile-tiny.sh +# Encoding : utf-8 +# Author : We-unite +# Email : weunite1848@gmail.com +# Created Time : 2024-11-16 13:06:58 +####################################################################### + +set -e +# 如果是root,报错 +if [ $(id -u) -eq 0 ]; then + echo "Do not run as root" + exit 1 +fi + +if [ $# -ne 2 ]; then + echo "Usage: $0 [armv8-a|armv7-a]" + exit 1 +fi + +native=~/app/native +file=$1 +targetFile=${file%.*} +arch=$2 + +case $arch in + armv8-a) + compiler=$native/llvm/bin/aarch64-unknown-linux-ohos + targetPlatform=aarch64-linux-ohos + ;; + armv7-a) + compiler=$native/llvm/bin/armv7-unknown-linux-ohos + targetPlatform=arm-linux-ohos + ;; + *) + echo "Unsupported arch" + exit 1 + ;; +esac + +case ${file##*.} in + c) + compiler=$compiler-clang + ;; + cpp) + compiler=$compiler-clang++ + ;; + *) + echo "Unsupported file type" + exit 1 + ;; +esac + +export CPATH= + +$compiler -o $targetFile $file -Wall \ + --target=$targetPlatform \ + --sysroot=$native/sysroot \ + -march=$arch -mfloat-abi=softfp ``` # 完结撒花 @@ -417,4 +563,4 @@ cmake --build build - 内存 10G+ - 磁盘 160G+ -不说了,抓紧攒点钱开学升级电脑配置要紧……磁盘快炸了…… \ No newline at end of file +不说了,抓紧攒点钱开学升级电脑配置要紧……磁盘快炸了…… diff --git a/common/script4works.html b/common/script4works.html index b865bf1..d6759a2 100644 --- a/common/script4works.html +++ b/common/script4works.html @@ -158,7 +158,7 @@ -项目文档 diff --git a/common/script4works.js b/common/script4works.js index 0ae78a2..8d5f6d5 100644 --- a/common/script4works.js +++ b/common/script4works.js @@ -159,7 +159,7 @@ document.writeln(" "); document.writeln(""); document.writeln(" -项目文档"); document.writeln("
"); -document.writeln(" OpenHarmony编译"); +document.writeln(" OpenHarmony 编译"); document.writeln(" LCM交叉编译"); document.writeln(" godo知识总结"); document.writeln("
"); -- cgit v1.2.3-70-g09d2