0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

三方库移植OpenHarmony过程

OpenAtom OpenHarmony 来源:OpenAtom OpenHarmony 作者:OpenAtom OpenHarmony 2022-09-22 10:11 次阅读

战码先锋,PR征集令(以下简称“战码先锋”)第二期正如火如荼地进行中,涉及OpenAtom OpenHarmony(以下简称“OpenHarmony”)主干仓、SIG仓、三方库,共计1000+代码仓任君挑战。

在战码先锋活动中,我们注意到开发者对三方库移植有着浓厚的兴趣。三方库是基于标准Linux系统的C/C++开源库,例如OpenCV、LZMA压缩算法、ZXing-cpp图像处理库,三方库移植能为OpenHarmony项目补齐更多功能或组件,对繁荣生态非常重要。

三方库移植也为参与OpenHarmony贡献提供了另外一种思路,我们希望通过实战经验的分享鼓励更多感兴趣的开发者动手移植自己心仪的三方库。为此,我们邀请目前还是一名大三学生,也是战码先锋优秀贡献者,OpenHarmony啃论文俱乐部优秀学员——贾佳豪(社区网名:离北况归)进行分享,他在完成了一个三方库在OpenHarmony标准系统上的移植工作后,总结了以下经验。

四步实现三方库移植:1、在Linux下编译要移植的三仓库,分析编译过程;2、将要移植的三方库加入编译框架中以及产品引用;3、增量编译出动态链接库和可执行文件推送到开发板上;4、在开发板上验证移植是否成功、API接口导出。

ebfeeffe-39b7-11ed-9e49-dac502259ad0.jpg

第一步

三方库下载最新分支代码后在Linux下编译,分析编译过程。 观察原生库目录结构或者Readme可以知道该如何编译,一般有如下两种编译方式: ①在原生库根目录中,存在CMakeLists.txt文件。在原生库下新建build目录通过cmake或者cmake-gui生成makeflie然后make。 ②在原生库目录中存在autogen.sh,configure.ac文件,原生库使用Makefile.am构建,./autogen.sh再./configure命令生成Makefile,最后make、make install。

在Linux下编译原生库要配置好编译环境,安装cmake、make、automake等工具。

分析编译过程:

提取编译出动态链接库和测试用的可执行文件需要的源文件和头文件、编译时添加的cflag、编译器参数以及编译需要链接的库。该过程分为如下两种情况:

①在cmake生成makefile的过程中分析build.make、depend.make、flags.make、link.txt等得出三方库对应的依赖关系。

ec2e1df6-39b7-11ed-9e49-dac502259ad0.png

②使用Makefile.am构建的三方库通过分析make.am内容可以直接分析编译动态链接库和测试用的可执行文件需要哪些源文件,而编译需要添加的编译器参数和需要链接的库则通过分析三方库父目录makefile文件提取。

ec450728-39b7-11ed-9e49-dac502259ad0.png

ee871148-39b7-11ed-9e49-dac502259ad0.png

eeb9e230-39b7-11ed-9e49-dac502259ad0.png

第二步

根据第一步分析得到的结果把三方库加入OpenHarmony编译构建体系。 ①定义子系统并加入编译框架。首先把三方库放置在OpenHarmony源码third_party目录下作为子系统目录。子系统目录下创建ohos.build文件,构建时会先读取该文件。

eeedd5d6-39b7-11ed-9e49-dac502259ad0.png

把子系统配置到build/subsystem_config.json.

ef2652b2-39b7-11ed-9e49-dac502259ad0.png

②定义组件并加入子系统:在上述定义子系统时添加的ohos.build文件中,我们已经定义好了对应的组件。

ef45acc0-39b7-11ed-9e49-dac502259ad0.png

module_list所定义的为该组件的目标,上述定义的目标为测试用的可执行文件。

ef7b1f86-39b7-11ed-9e49-dac502259ad0.png

③定义目标并加入组件:在编写gn文的时候,我们定义的动态库以及测试可执行程序都是我们的目标模块,在每个目标模块中添加对应的组件名后即将我们的目标模块加入该组件中。

ef9d6de8-39b7-11ed-9e49-dac502259ad0.png

④产品引用:把子系统及其组件加入产品定义中,以rk3568为例,产品定义文件存在vendor/hihope/rk3568/config.json,以下内容添加到config.json中:

f248c6aa-39b7-11ed-9e49-dac502259ad0.png

第三步

增量编译出动态链接库和可执行文件,在OpenHarmony源码执行。

./build.sh --product-name rk3568 --ccache --build-target=移植的三方库名称 --target-cpu arm64

(ohos更新到3.2版本后,支持64位系统的编译,默认情况下编译的都是32位系统,在编译命令中添加--target-cpu arm64即可构建64位系统)

第一次编译可能会报错,我们根据报错信息调整编写的gn文件。消除clang编译警告,例如-Wimplicit-function-declaration改为-Wno-implicit-function-declaration添加到gn文的cflags信息里面。不推荐直接全量编译出镜像烧录到开发板上。将耗费较多时间,也不便编译调试。编译成功生成的动态链接库和测试用的可执行文件在out目录下。

第四步

在开发板上验证移植是否成功、API接口导出。

利用hdc_std工具将编译出的so动态链接库和测试用的可执行文件放到开发板上,验证移植的三方库功能是否正常。

f2798f88-39b7-11ed-9e49-dac502259ad0.png

API是指应用程序编程接口,通过API接口可以实现指定的功能,而不需要了解其内部实现细节。API接口导出在pc端,需要编译生成的动态链接库和测试用的可执行文件。API接口导出思路如下:

①新建allHeads.h,该头文件中包含所有库对外导出的头文件

②新增allDySos目录,该目录下放置生成的动态库

③新增allTests目录,该目录下放置所有生成的测试用的可执行文件

④新建自动化测试脚本export_interface.sh,脚本如下,执行时需要给脚本传入编译头文件的参数例如./export_interface.sh -I头文件所在路径-D宏定义(编译所有动态库时,cflags/cflags_cc中的参数)

cxx="0":mixed_api() {
    while read line    do        if [ $cxx != "1" -o "$4" == "1" ];then            tmp=$line        else            tmp=`echo $line | sed "s/(.*$//g" | sed "s/^.*:://g"`        fi        res=`cat $2 |grep "$tmp" -F`        if [ "$res" != "" ];then            echo "$line" >> $3        fi    done < $1}

以上是部分代码展现,阅览全部代码请打开链接

https://gitee.com/openharmony-sig/contest/tree/master/2022_OpenHarmony_thirdparty/speexdsp

f2a51f7c-39b7-11ed-9e49-dac502259ad0.png

再次总结四步要点:1、在Linux下编译要移植的三仓库,分析编译过程;2、将要移植的三方库加入编译框架中以及产品引用;3、增量编译出动态链接库和可执行文件推送到开发板上。4、在开发板上验证移植是否成功、API接口导出。

备注:三方库的移植需要搭建好OpenHarmony南向开发环境,也需要有开发板和掌握hdc_std工具的使用。另外,这样移植有一个前提,与平台无关(即库不涉及对os_api有依赖,不涉及opensl以及opengl,ohos上这两个库和业界的有一定差异,不涉及硬件,不涉及驱动)。

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux系统
    +关注

    关注

    4

    文章

    593

    浏览量

    27396
  • 编译
    +关注

    关注

    0

    文章

    657

    浏览量

    32867
  • OpenHarmony
    +关注

    关注

    25

    文章

    3718

    浏览量

    16297

原文标题:4步成功将三方库——speexdsp移植到OpenHarmony

文章出处:【微信号:gh_e4f28cfa3159,微信公众号:OpenAtom OpenHarmony】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    使用OpenHarmonyNDK移植三方Speexdsp

    大家好,我是一名即将本科毕业的OpenHarmony开发者,去年暑假利用了两个月时间移植了一个语音处理的三方Speexdsp到OpenHarmon
    的头像 发表于 05-16 10:18 2050次阅读
    使用<b class='flag-5'>OpenHarmony</b>NDK<b class='flag-5'>移植</b><b class='flag-5'>三方</b><b class='flag-5'>库</b>Speexdsp

    快速移植OpenHarmony三方芯片平台的方法

    HDF等)的移植。详细步骤在接下来的章节中介绍。移植三方芯片平台的步骤下面以树莓派3b (BCM2837) 为例,演示将OpenHarmony移植
    发表于 04-12 11:08

    4步成功将三方——speexdsp移植OpenHarmony

    归)进行分享,他在完成了一个三方OpenHarmony标准系统上的移植工作后,总结了以下经验。四步实现三方
    发表于 09-27 12:02

    OpenHarmony三方适配指南

    本文以OpenHarmony-3.2-Beta4上适配modbus编译动态为例。获取三方使用之前要做好代码溯源,确认可用的版本,开源许可和发布方式等。通过正确的路径获取源码,可以是
    发表于 04-07 09:12

    OpenAtom OpenHarmony 三方创建发布及安全隐私检测

    OpenAtom OpenHarmony三方(以下简称“三方”或“包”),是经过验证可在OpenHa
    发表于 11-13 17:27

    openharmony三方组件适配移植易于使用的ohos

    项目介绍 项目名称:MaterialScrollBar 所属系列:openharmony的第三方组件适配移植 功能:易于使用的ohos,可轻松实现滚动跟随效果 项目
    发表于 03-30 10:44 0次下载

    openharmony三方组件适配移植的多选列表功能教程

    项目介绍 项目名称:drag-select-recyclerview 所属系列:openharmony的第三方组件适配移植 功能:drag-select-recyclerview是一个简单的多选列表
    发表于 03-30 10:48 1次下载

    openharmony三方组件适配移植的股价图表

    项目介绍 项目名称:ikvStockChart 所属系列:openharmony的第三方组件适配移植 功能:ikvStockChart一个简单的openharmony图表
    发表于 04-01 09:30 2次下载

    openharmony三方组件适配移植的图表功能

    项目介绍 项目名称:achartengine 所属系列:openharmony的第三方组件适配移植 功能:achartengine是应用程序的图表。它目前支持以下图表类型:折线图、面
    发表于 04-01 09:40 1次下载

    openharmony三方组件适配移植的SVGA动画渲染

    项目介绍 项目名称:SVGAPlayer-Ohos 所属系列:openharmony的第三方组件适配移植 功能:SVGAPlayer-Ohos 是一个轻量的动画渲染。你可以使用工具从
    发表于 04-02 11:47 15次下载

    openharmony三方组件适配移植的okhttp教程案例

    项目介绍 项目名称:okhttp 所属系列:openharmony的第三方组件适配移植 功能:PUT,DELETE,POST,GET等请求、文件的上传下载、加载图片(内部会图片大小自动压缩)、支持
    发表于 04-12 09:25 4次下载

    openharmony三方组件适配移植的数据组件

    项目介绍 项目名称:DBFlow 所属系列:openharmony的第三方组件适配移植 功能:DBFlow是一个快速、高效、功能丰富数据组件 项目
    发表于 04-13 09:56 2次下载

    总结移植三方OpenHarmony的经验

    三方主要是基于标准 Linux 系统的 c/c++ 开源,所以三方移植工作,首先是在标准
    的头像 发表于 05-07 15:52 6295次阅读

    鸿蒙三方适配指南

    本文以 OpenHarmony-3.2-Beta4 上适配 modbus 编译动态为例。 获取三方 使用之前要做好代码溯源,确认可用的版本,开源许可和发布方式等。 通过正确的路径获
    的头像 发表于 02-14 09:33 3473次阅读

    【开源三方】bignumber.js:一个大数数学

    点击蓝字 ╳ 关注我们 开源项目 OpenHarmony 是每个人的 OpenHarmony OpenAtom OpenHarmony (以下简称“OpenHarmony”)
    的头像 发表于 08-18 21:05 892次阅读