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

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

3天内不再提示

鸿蒙三方库适配指南

OpenHarmony威廉希尔官方网站 社区 来源:OST开源开发者 2023-02-14 09:33 次阅读

本文以 OpenHarmony-3.2-Beta4 上适配 modbus 编译动态库为例。

获取三方库

使用之前要做好代码溯源,确认可用的版本,开源许可和发布方式等。

通过正确的路径获取源码,可以是官网,或者指定托管的 github 或者 gitee 仓。

官网:https://libmodbus.org/
github:https://github.com/stephane/libmodbus

移植三方库

三方库移植主要需要以下四步。

linux 编译

编译三方库:

如果原三方库根目录存在 CMakeLists.txt 文件,新建 build 目录,通过 cmake 生成 makeflie 然后 make。

如果根目录存在 autogen.sh 或 configure.ac 文件,使用 Makefile.am 构建,先执行 ./autogen.sh,再执行 ./configure 命令生成 Makefile,最后 make 和 make install。

分析编译过程:提取编译动态链接库和测试用的可执行文件所需要的源文件和头文件、编译添加的 cflag 和其他编译器参数,以及编译需要的链接库。

根据三方库的编译有两种情况:

在 cmake 生成 makefile 的过程中,分析 build.make(生成目标的源文件)、depend.make(需要依赖的其他 C 源文件)、flags.make(cflags 相关标记)、link.txt(链接库相关信息)等得出三方库对应的依赖关系。

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

②OpenHarmony 适配

三方库一般放置在 third_party 目录下。

编译之前要增加模块配置,可以参考以下链接:

https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/subsystems/subsys-build-module.md#新增并编译模块

部件名:modbus_part_name = “libmodbus”

子系统名:modbus_subsystem_name = “modbus”

新增子系统和部件名的方式:

(1)在模块目录下配置 BUILD.gn,根据模板类型选择对应的 gn 模板。

third_party/libmodbus/BUILD.gn
(2)在新建的子系统目录下每个部件对应的文件夹下创建 bundle.json 文件,定义部件信息。
third_party/libmodbus/bundle.json
(3)修改 build 目录下的 subsystem_config.json 文件。
buildsubsystem_config.json
e107d7d6-ab9b-11ed-bfe3-dac502259ad0.png (4)在 vendor/{product_company}/{product-name} 目录下的产品配置如 product-name 是 hispark_taurus_standard 时,在 config.json 中添加对应的部件,直接添加到原有部件后即可。
productdefinecommoninheritrich.json
e126aa94-ab9b-11ed-bfe3-dac502259ad0.png

这几步适配都需要根据三方库的引用方式来确定,并不需要每步都配置。如果当前模块是需要添加到已经有的部件或子系统,就只需要配置 1 和 2 步即可。

③增量编译

编译动态链接库和可执行文件:

./build.sh--product-namerk3568--ccache--build-target

注:三方库名称 --target-cpu arm64,ohos 到 3.2 版本之后,默认编译的都是 32 位系统,若要支持 64 位系统,在编译命令中添加:

–target-cpuarm64

例如:

./build.sh--product-namerk3568--ccache-Tlibmodbus
编译过程可能出现报错,根据报错信息调整 gn。消除编译警告,例如:
-Wimplicit-function-declaration
改为:
-Wno-implicit-function-declaration

加到 gn的 cflags 信息里面。

编译成功生成的动态链接库和测试用的可执行文件在 out 目录下。例如:

out/rk3568/modbus/libmodbus/libmodbus.z.so

e1429b3c-ab9b-11ed-bfe3-dac502259ad0.png

④验证接口

将编译好的动态库和测试用例的可执行文件推送到开发板上。然后验证是否成功,保证测试用例都能在开发板上运行通过。

API 接口是提供给北向调用的,实现指定的功能,使用者不需要了解其内部具体实现。按照业务需要提供 native 和 js 接口。

引用方式

①静态库

在部件中需要使用的 gn 中配置 deps 项,然后在代码中直接引用接口。

“//third_party/libmodbus:modbus”,
例如: e1564cf4-ab9b-11ed-bfe3-dac502259ad0.png

②动态库

先编译动态库,然后放在板子指定路径,然后通过 dlopen 导入动态库,最后在代码中通过句柄调引用接口。

例如:

if(handle==nullptr){
MMI_HILOGE("Openfailed,soname:%{public}s,msg:%{public}s",pluginPath.data(),dlerror());
returnfalse;
}

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

    关注

    28

    文章

    1812

    浏览量

    77089
  • 移植
    +关注

    关注

    1

    文章

    379

    浏览量

    28150
  • 编译
    +关注

    关注

    0

    文章

    659

    浏览量

    32903
  • 鸿蒙
    +关注

    关注

    57

    文章

    2369

    浏览量

    42900
  • OpenHarmony
    +关注

    关注

    25

    文章

    3728

    浏览量

    16395

原文标题:鸿蒙三方库适配指南

文章出处:【微信号:gh_834c4b3d87fe,微信公众号:OpenHarmony威廉希尔官方网站 社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    EE-303:将VisualDSP线程安全与第三方RTOS配合使用

    电子发烧友网站提供《EE-303:将VisualDSP线程安全与第三方RTOS配合使用.pdf》资料免费下载
    发表于 01-07 14:09 0次下载
    EE-303:将VisualDSP线程安全<b class='flag-5'>库</b>与第<b class='flag-5'>三方</b>RTOS配合使用

    AKI跨语言调用神助攻C/C++代码迁移至HarmonyOS NEXT

    ,AKI已上线OpenHarmony开源社区,“OpenHarmony三方中心仓网站”搜索“AKI”即可了解体验。期待更多厂商和开发者下载使用并参与共建,打造更高性能的鸿蒙应用,共同推进鸿蒙
    发表于 01-02 17:08

    鸿蒙Flutter实战:14-现有Flutter 项目支持鸿蒙 II

    : path: \'../../modules/me\' support: path: \'../../modules/support\' 三方鸿蒙适配 编辑 pubspec.
    发表于 12-26 14:59

    三方检测机构该如何提升核心竞争力?

    在国家“一带一路”和“智能制造2025”等政策的引领下,面对竞争日益激烈的国际环境,作为全球最大的制造业国家,中国的检测行业正经历着迅猛的发展,成为全球增长最快、潜力最大的市场之一。 第三方检测逐渐
    的头像 发表于 12-17 15:44 145次阅读
    第<b class='flag-5'>三方</b>检测机构该如何提升核心竞争力?

    鸿蒙Flutter实战:05-使用第三方插件

    使用的第三方插件,其底层以的没有适配鸿蒙,则需要通过overrider配置其鸿蒙化的替代插件,否则会在运行时报错。如下面所示: ```y
    发表于 10-22 21:54

    瑞芯微RK3566鸿蒙开发板Android11修改第三方输入法为默认输入法

    本文适用于触觉智能所有支持Android11系统的开发板修改第三方输入法为默认输入法。本次使用的是触觉智能的Purple Pi OH鸿蒙开源主板,搭载了瑞芯微RK3566芯片,类树莓派设计,是Laval官方社区主荐的一款鸿蒙开发
    的头像 发表于 09-24 09:43 482次阅读
    瑞芯微RK3566<b class='flag-5'>鸿蒙</b>开发板Android11修改第<b class='flag-5'>三方</b>输入法为默认输入法

    维天地低代码开发平台助力第三方质检行业数据可视化

    三方检验是由独立于买卖双方利益之外的第三方机构(例如专业的监督检验机构)执行的,这些机构以公正、公平、权威的非当事人身份,依据双方共同认可的法律、标准和合同等进行商品的符合性检验和认证活动
    的头像 发表于 08-09 13:59 294次阅读
    <b class='flag-5'>三</b>维天地低代码开发平台助力第<b class='flag-5'>三方</b>质检行业数据可视化

    微软或将开放Xbox主机授权给第三方厂商

    据悉,5 月 26 日,知名媒体 Windows Central 的编辑 Jez Corden 揭露了微软即将遵循第三方手柄流程,允许在其 XBOX 主机上引入第三方产品。
    的头像 发表于 05-27 15:18 675次阅读

    苹果更新配件设计指南,第三方厂商可生产非MFi认证头显配件

    值得注意的是,该指南中最关键的部分是关于Vision Pro头戴式设备的头带卡扣装置,它使苹果原装头带能方便地与头显相连。参照苹果列出的具体规格,第三方制造商可更易生产出同样尺寸且价格更为亲民的头带。
    的头像 发表于 05-20 16:53 612次阅读

    中软国际携手爱聚科技,与上栗县文广新旅局完成三方签约

    4月24日,中软国际科技服务有限公司(以下简称“中软国际”)携手上海爱聚网络科技有限公司(以下简称“爱聚科技”),就萍乡市鸿蒙元服务生态合作事宜,与江西省萍乡市上栗县文化广电新闻出版旅游局完成三方签约。
    的头像 发表于 04-28 10:42 564次阅读
    中软国际携手爱聚科技,与上栗县文广新旅局完成<b class='flag-5'>三方</b>签约

    Labview如何内嵌操作第三方EXE程序!

    自己在网上搜了下相关资料,能把第三方EXE内嵌进入容器里,但是有个问题,这个第三方软件必须手动拖到容器正中间,手动最大化。请问有什么方法可以自动实现吗? 下图是我内嵌的POLL 软件。如图!
    发表于 04-18 14:26

    鸿蒙OS开发学习:【第三方调用】

    在Stage模型中,如何调用已经上架到[三方中心]的社区和项目内创建的本地
    的头像 发表于 04-14 11:34 928次阅读
    <b class='flag-5'>鸿蒙</b>OS开发学习:【第<b class='flag-5'>三方</b><b class='flag-5'>库</b>调用】

    鸿蒙OS开发学习:【尺寸适配实现】

    鸿蒙开发中,尺寸适配是一个重要的概念,它可以帮助我们在不同屏幕尺寸的设备上正确显示和布局我们的应用程序。本文将介绍如何在鸿蒙开发中实现尺寸适配的方法。
    的头像 发表于 04-10 16:05 1783次阅读
    <b class='flag-5'>鸿蒙</b>OS开发学习:【尺寸<b class='flag-5'>适配</b>实现】

    Meta Quest头显将支持多款安卓第三方应用并行

    Meta已悄然启动了与此相关的功能,意味着Quest头显可同时操作多个第三方Android应用。在此之前,Quest对第三方Android应用有严格限制,用户每次仅能打开一个,无法实现同屏幕并行多个第三方应用进程。
    的头像 发表于 03-11 10:58 770次阅读

    使用 Taro 开发鸿蒙原生应用 —— 快速上手,鸿蒙应用开发指南

    鸿蒙原生应用。 在 《使用 Taro 开发鸿蒙原生应用》 系列文章中,我们已经介绍了 鸿蒙的基本概念 和 Taro 适配鸿蒙的原理。本文作
    的头像 发表于 02-02 16:09 903次阅读
    使用 Taro 开发<b class='flag-5'>鸿蒙</b>原生应用 —— 快速上手,<b class='flag-5'>鸿蒙</b>应用开发<b class='flag-5'>指南</b>