前言

在OpenHarmony应用开发中,通过NDK编译三方so是比较常见的需求。本文将社区的文档总结归纳,以较为容易理解的方式呈现给各位开发者。

开发环境

Linux: Ubuntu 22.04.5LTS

SDK: ohos-sdk-full_5.0.2-Release(5.0.2.126)

流程

编译环境准备

为了保持统一性和泛用性,全文会在Linux环境上进行操作,Windows和MacOS的开发者可能在路径配置或者环境变量上有所差异,但是在具体的操作和执行步骤上是大同小异的。

社区适配文档里所用Linux版本为20.04,鉴于版本更新迭代以及适配其他开发环境,这里会使用22.04的版本作为指导环境。

下载依赖

OpenHarmony提供了lycium框架用以快速交叉编译三方库。

lycium框架支持多种构建方式的三方库,为了保障三方库能正常编译,我们需要保证编译环境中包含以下几个基本编译命令: gcc, cmake, make, pkg-config, autoconf, autoreconf, automake, 如若缺少相关命令,可通过官网下载对应版本的工具包,也可以在编译机上通过命令安装,如若Ubuntu系统上缺少cmake可以通过以下命令安装:

sudo apt install cmake

下载OHOS SDK

  1. https://ci.openharmony.cn/workbench/cicd/dailybuild/dailylist下载5.0.2-Release版本(选用此版本是因为该版本当前最新且稳定,如有需要可以下载其他版本)的sdk。

  2. 将下载好的sdk压缩包放到linux环境下。

  3. 执行以下命令解压压缩包

    for i in *.zip;do unzip ${i};done
    

    执行完后查看解压包

img

配置环境变量

lycium支持的是C/C++三方库的交叉编译,SDK工具链只涉及到native目录下的工具,故OHOS_SDK的路径需配置成native工具的父目录,linux环境中配置SDK环境变量方法如下:

export OHOS_SDK=/home/winslei/ndk/ohos_sdk/502126 # 此处SDK的路径使用者需配置成自己的sdk解压目录。直接执行为临时变量或者配置到环境变量都可以。

设置编译机cmake识别OHOS系统

由于sdk中的cmake版本过低, 导致很多开源库在cmake阶段报错。这个时候就需要用户在编译机上安装一个高版本的cmake(推荐使用3.26及以上版本,默认下载版本为3.22)。但是cmake官方是不支持OHOS的。解决方案:

  1. 卸载旧版本

    sudo apt remove cmake
    
  2. 下载3.31版本

    wget https://cmake.org/files/v3.31/cmake-3.31.0.tar.gz
    
  3. 解压

    tar -zxvf cmake-3.31.0.tar.gz
    
  4. 执行bootstrap进行检查

    cd cmake-3.31.0
    ./bootstrap
    
  5. 编译安装

    make
    sudo make install
    
  6. 配置软链接

    sudo ln -s /home/winslei/dependence/cmake/3310/cmake-3.31.0/bin/cmake /usr/bin/cmake
    
  7. 查看cmake版本

    cmake --version
    
  8. 将ohos化cmake扩展复制到高版本cmake里

    cp /home/winslei/ndk/ohos_sdk/502126/native/build-tools/cmake/share/cmake-3.28/Modules/Platform/OHOS.cmake /home/winslei/dependence/cmake/3310/cmake-3.31.0/Modules/Platform
    

配置编译环境

下载交叉编译框架仓

官方社区将交叉编译工具链以及常用三方库及其鸿蒙化适配代码和编译脚本都整合到了tpc_c_cplusplus仓,因此需要基于该仓去编译构建。

git clone https://gitee.com/openharmony-sig/tpc_c_cplusplus.git --depth=1

拷贝编译工具

为了简化开发中命令的配置,官方针对arm架构以及aarch64架构集成了几个编译命令,存放在lycium/Buildtools目录下,在使用lycium工具前,需要将这些编译命令拷贝到SDK对应的目录下,具体操作如下:

cd lycium/Buildtools # 进入到工具包目录
sha512sum -c SHA512SUM # 可校验工具包是否正常, 若输出"toolchain.tar.gz: OK"则说明工具包正常,否则说明工具包异常,需重新下载
tar -zxvf toolchain.tar.gz # 解压拷贝编译工具
cp toolchain/* ${OHOS_SDK}/native/llvm/bin # 将命令拷贝到工具链的native/llvm/bin目录下

编译构建

这里以Paddle-Lite库为例,进行编译构建。

进入lycium目录编译

cd lycium
./build.sh Paddle-Lite

全部编译完成后会生成最终的编译产物

img

FAQ

编译时报错clang-15 not found

报这个错是因为如果在Windows环境下下载好sdk后解压完再复制到linux环境下,这个时候clang-15执行文件的大小是异常的。因此需要将压缩包放到linux下再通过命令解压。

编译时报错Compiler error reporting is too harsh for ../configure

报这个错是因为没有执行设置编译机cmake识别OHOS系统第8步以及拷贝编译工具

注意:每次OHOS_SDK发生变化都需要执行上述步骤。

如何编译不在仓里的三方库

参考https://gitcode.com/openharmony-sig/tpc_c_cplusplus/blob/master/lycium/README.md#%E9%80%9A%E8%BF%87lycium%E5%B7%A5%E5%85%B7%E5%BF%AB%E9%80%9F%E5%85%B1%E5%BB%BAcc%E4%B8%89%E6%96%B9%E5%BA%93

参考文献

https://gitcode.com/openharmony-sig/tpc_c_cplusplus/blob/master/thirdparty/Paddle-Lite/docs/hap_integrate.md

https://gitcode.com/openharmony-sig/tpc_c_cplusplus/blob/master/lycium/Buildtools/README.md

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐