本文以 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

productdefinecommoninheritrich.json

这几步适配都需要根据三方库的引用方式来确定,并不需要每步都配置。如果当前模块是需要添加到已经有的部件或子系统,就只需要配置 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
④验证接口
将编译好的动态库和测试用例的可执行文件推送到开发板上。然后验证是否成功,保证测试用例都能在开发板上运行通过。
API 接口是提供给北向调用的,实现指定的功能,使用者不需要了解其内部具体实现。按照业务需要提供 native 和 js 接口。
引用方式
①静态库
在部件中需要使用的 gn 中配置 deps 项,然后在代码中直接引用接口。
“//third_party/libmodbus:modbus”,例如:

②动态库
先编译动态库,然后放在板子指定路径,然后通过 dlopen 导入动态库,最后在代码中通过句柄调引用接口。
例如:
if(handle==nullptr){ MMI_HILOGE("Openfailed,soname:%{public}s,msg:%{public}s",pluginPath.data(),dlerror()); returnfalse; }
-
MODBUS
+关注
关注
28文章
2159浏览量
79863 -
移植
+关注
关注
1文章
401浏览量
28747 -
编译
+关注
关注
0文章
680浏览量
34218 -
鸿蒙
+关注
关注
60文章
2643浏览量
44242 -
OpenHarmony
+关注
关注
30文章
3858浏览量
18795
原文标题:鸿蒙三方库适配指南
文章出处:【微信号:gh_834c4b3d87fe,微信公众号:OpenHarmony技术社区】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
鸿蒙非侵入式弹窗新解法,企查查正式开源“QuickDialog”弹窗组件库

天合跟踪获得DNV第三方风洞测试审查报告
HarmonyOS入门指南
鸿蒙5开发宝藏案例分享---切面编程实战揭秘
Get这个秘籍,鸿蒙原生应用页面滑动丝滑无比
鸿蒙文件传输三方库上线开源鸿蒙社区 十行代码实现大文件高速传输
EE-303:将VisualDSP线程安全库与第三方RTOS配合使用

鸿蒙原生页面高性能解决方案上线OpenHarmony社区 助力打造高性能原生应用
AKI跨语言调用库神助攻C/C++代码迁移至HarmonyOS NEXT
鸿蒙Flutter实战:14-现有Flutter 项目支持鸿蒙 II
第三方检测机构该如何提升核心竞争力?

鸿蒙Flutter实战:05-使用第三方插件
瑞芯微RK3566鸿蒙开发板Android11修改第三方输入法为默认输入法

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

评论