本文以 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文章
1950瀏覽量
78654 -
移植
+關注
關注
1文章
392瀏覽量
28510 -
編譯
+關注
關注
0文章
674瀏覽量
33602 -
鴻蒙
+關注
關注
57文章
2469瀏覽量
43642 -
OpenHarmony
+關注
關注
26文章
3804瀏覽量
17864
原文標題:鴻蒙三方庫適配指南
文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
Get這個秘籍,鴻蒙原生應用頁面滑動絲滑無比
鴻蒙文件傳輸三方庫上線開源鴻蒙社區 十行代碼實現大文件高速傳輸
EE-303:將VisualDSP線程安全庫與第三方RTOS配合使用

鴻蒙原生頁面高性能解決方案上線OpenHarmony社區 助力打造高性能原生應用
AKI跨語言調用庫神助攻C/C++代碼遷移至HarmonyOS NEXT
鴻蒙Flutter實戰:14-現有Flutter 項目支持鴻蒙 II
第三方檢測機構該如何提升核心競爭力?

億緯鋰能與武漢大學、德布勒森大學簽署三方合作諒解備忘錄
鴻蒙Flutter實戰:09-現有Flutter項目支持鴻蒙
鴻蒙Flutter實戰:05-使用第三方插件
瑞芯微RK3566鴻蒙開發板Android11修改第三方輸入法為默認輸入法

三維天地低代碼開發平臺助力第三方質檢行業數據可視化

評論