0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

三方庫(kù)移植OpenHarmony過(guò)程

OpenAtom OpenHarmony ? 來(lái)源:OpenAtom OpenHarmony ? 作者:OpenAtom OpenHarmony ? 2022-09-22 10:11 ? 次閱讀

戰(zhàn)碼先鋒,PR征集令(以下簡(jiǎn)稱(chēng)“戰(zhàn)碼先鋒”)第二期正如火如荼地進(jìn)行中,涉及OpenAtom OpenHarmony(以下簡(jiǎn)稱(chēng)“OpenHarmony”)主干倉(cāng)、SIG倉(cāng)、三方庫(kù),共計(jì)1000+代碼倉(cāng)任君挑戰(zhàn)。

在戰(zhàn)碼先鋒活動(dòng)中,我們注意到開(kāi)發(fā)者對(duì)三方庫(kù)移植有著濃厚的興趣。三方庫(kù)是基于標(biāo)準(zhǔn)Linux系統(tǒng)的C/C++開(kāi)源庫(kù),例如OpenCV、LZMA壓縮算法、ZXing-cpp圖像處理庫(kù),三方庫(kù)移植能為OpenHarmony項(xiàng)目補(bǔ)齊更多功能或組件,對(duì)繁榮生態(tài)非常重要。

三方庫(kù)移植也為參與OpenHarmony貢獻(xiàn)提供了另外一種思路,我們希望通過(guò)實(shí)戰(zhàn)經(jīng)驗(yàn)的分享鼓勵(lì)更多感興趣的開(kāi)發(fā)者動(dòng)手移植自己心儀的三方庫(kù)。為此,我們邀請(qǐng)目前還是一名大三學(xué)生,也是戰(zhàn)碼先鋒優(yōu)秀貢獻(xiàn)者,OpenHarmony啃論文俱樂(lè)部?jī)?yōu)秀學(xué)員——賈佳豪(社區(qū)網(wǎng)名:離北況歸)進(jìn)行分享,他在完成了一個(gè)三方庫(kù)在OpenHarmony標(biāo)準(zhǔn)系統(tǒng)上的移植工作后,總結(jié)了以下經(jīng)驗(yàn)。

四步實(shí)現(xiàn)三方庫(kù)移植:1、在Linux下編譯要移植的三倉(cāng)庫(kù),分析編譯過(guò)程;2、將要移植的三方庫(kù)加入編譯框架中以及產(chǎn)品引用;3、增量編譯出動(dòng)態(tài)鏈接庫(kù)和可執(zhí)行文件推送到開(kāi)發(fā)板上;4、在開(kāi)發(fā)板上驗(yàn)證移植是否成功、API接口導(dǎo)出。

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

第一步

三方庫(kù)下載最新分支代碼后在Linux下編譯,分析編譯過(guò)程。 觀察原生庫(kù)目錄結(jié)構(gòu)或者Readme可以知道該如何編譯,一般有如下兩種編譯方式: ①在原生庫(kù)根目錄中,存在CMakeLists.txt文件。在原生庫(kù)下新建build目錄通過(guò)cmake或者cmake-gui生成makeflie然后make。 ②在原生庫(kù)目錄中存在autogen.sh,configure.ac文件,原生庫(kù)使用Makefile.am構(gòu)建,./autogen.sh再./configure命令生成Makefile,最后make、make install。

在Linux下編譯原生庫(kù)要配置好編譯環(huán)境,安裝cmake、make、automake等工具。

分析編譯過(guò)程:

提取編譯出動(dòng)態(tài)鏈接庫(kù)和測(cè)試用的可執(zhí)行文件需要的源文件和頭文件、編譯時(shí)添加的cflag、編譯器參數(shù)以及編譯需要鏈接的庫(kù)。該過(guò)程分為如下兩種情況:

①在cmake生成makefile的過(guò)程中分析build.make、depend.make、flags.make、link.txt等得出三方庫(kù)對(duì)應(yīng)的依賴(lài)關(guān)系。

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

②使用Makefile.am構(gòu)建的三方庫(kù)通過(guò)分析make.am內(nèi)容可以直接分析編譯動(dòng)態(tài)鏈接庫(kù)和測(cè)試用的可執(zhí)行文件需要哪些源文件,而編譯需要添加的編譯器參數(shù)和需要鏈接的庫(kù)則通過(guò)分析三方庫(kù)父目錄makefile文件提取。

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

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

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

第二步

根據(jù)第一步分析得到的結(jié)果把三方庫(kù)加入OpenHarmony編譯構(gòu)建體系。 ①定義子系統(tǒng)并加入編譯框架。首先把三方庫(kù)放置在OpenHarmony源碼third_party目錄下作為子系統(tǒng)目錄。子系統(tǒng)目錄下創(chuàng)建ohos.build文件,構(gòu)建時(shí)會(huì)先讀取該文件。

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

把子系統(tǒng)配置到build/subsystem_config.json.

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

②定義組件并加入子系統(tǒng):在上述定義子系統(tǒng)時(shí)添加的ohos.build文件中,我們已經(jīng)定義好了對(duì)應(yīng)的組件。

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

module_list所定義的為該組件的目標(biāo),上述定義的目標(biāo)為測(cè)試用的可執(zhí)行文件。

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

③定義目標(biāo)并加入組件:在編寫(xiě)gn文的時(shí)候,我們定義的動(dòng)態(tài)庫(kù)以及測(cè)試可執(zhí)行程序都是我們的目標(biāo)模塊,在每個(gè)目標(biāo)模塊中添加對(duì)應(yīng)的組件名后即將我們的目標(biāo)模塊加入該組件中。

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

④產(chǎn)品引用:把子系統(tǒng)及其組件加入產(chǎn)品定義中,以rk3568為例,產(chǎn)品定義文件存在vendor/hihope/rk3568/config.json,以下內(nèi)容添加到config.json中:

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

第三步

增量編譯出動(dòng)態(tài)鏈接庫(kù)和可執(zhí)行文件,在OpenHarmony源碼執(zhí)行。

./build.sh --product-name rk3568 --ccache --build-target=移植的三方庫(kù)名稱(chēng) --target-cpu arm64

(ohos更新到3.2版本后,支持64位系統(tǒng)的編譯,默認(rèn)情況下編譯的都是32位系統(tǒng),在編譯命令中添加--target-cpu arm64即可構(gòu)建64位系統(tǒng))

第一次編譯可能會(huì)報(bào)錯(cuò),我們根據(jù)報(bào)錯(cuò)信息調(diào)整編寫(xiě)的gn文件。消除clang編譯警告,例如-Wimplicit-function-declaration改為-Wno-implicit-function-declaration添加到gn文的cflags信息里面。不推薦直接全量編譯出鏡像燒錄到開(kāi)發(fā)板上。將耗費(fèi)較多時(shí)間,也不便編譯調(diào)試。編譯成功生成的動(dòng)態(tài)鏈接庫(kù)和測(cè)試用的可執(zhí)行文件在out目錄下。

第四步

在開(kāi)發(fā)板上驗(yàn)證移植是否成功、API接口導(dǎo)出。

利用hdc_std工具將編譯出的so動(dòng)態(tài)鏈接庫(kù)和測(cè)試用的可執(zhí)行文件放到開(kāi)發(fā)板上,驗(yàn)證移植的三方庫(kù)功能是否正常。

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

API是指應(yīng)用程序編程接口,通過(guò)API接口可以實(shí)現(xiàn)指定的功能,而不需要了解其內(nèi)部實(shí)現(xiàn)細(xì)節(jié)。API接口導(dǎo)出在pc端,需要編譯生成的動(dòng)態(tài)鏈接庫(kù)和測(cè)試用的可執(zhí)行文件。API接口導(dǎo)出思路如下:

①新建allHeads.h,該頭文件中包含所有庫(kù)對(duì)外導(dǎo)出的頭文件

②新增allDySos目錄,該目錄下放置生成的動(dòng)態(tài)庫(kù)

③新增allTests目錄,該目錄下放置所有生成的測(cè)試用的可執(zhí)行文件

④新建自動(dòng)化測(cè)試腳本export_interface.sh,腳本如下,執(zhí)行時(shí)需要給腳本傳入編譯頭文件的參數(shù)例如./export_interface.sh -I頭文件所在路徑-D宏定義(編譯所有動(dòng)態(tài)庫(kù)時(shí),cflags/cflags_cc中的參數(shù))

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}

以上是部分代碼展現(xiàn),閱覽全部代碼請(qǐng)打開(kāi)鏈接

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

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

再次總結(jié)四步要點(diǎn):1、在Linux下編譯要移植的三倉(cāng)庫(kù),分析編譯過(guò)程;2、將要移植的三方庫(kù)加入編譯框架中以及產(chǎn)品引用;3、增量編譯出動(dòng)態(tài)鏈接庫(kù)和可執(zhí)行文件推送到開(kāi)發(fā)板上。4、在開(kāi)發(fā)板上驗(yàn)證移植是否成功、API接口導(dǎo)出。

備注:三方庫(kù)的移植需要搭建好OpenHarmony南向開(kāi)發(fā)環(huán)境,也需要有開(kāi)發(fā)板和掌握hdc_std工具的使用。另外,這樣移植有一個(gè)前提,與平臺(tái)無(wú)關(guān)(即庫(kù)不涉及對(duì)os_api有依賴(lài),不涉及opensl以及opengl,ohos上這兩個(gè)庫(kù)和業(yè)界的有一定差異,不涉及硬件,不涉及驅(qū)動(dòng))。

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux系統(tǒng)
    +關(guān)注

    關(guān)注

    4

    文章

    588

    瀏覽量

    27262
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    646

    瀏覽量

    32737
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3607

    瀏覽量

    15956

原文標(biāo)題:4步成功將三方庫(kù)——speexdsp移植到OpenHarmony

文章出處:【微信號(hào):gh_e4f28cfa3159,微信公眾號(hào):OpenAtom OpenHarmony】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    使用OpenHarmonyNDK移植三方庫(kù)Speexdsp

    大家好,我是一名即將本科畢業(yè)的OpenHarmony開(kāi)發(fā)者,去年暑假利用了兩個(gè)月時(shí)間移植了一個(gè)語(yǔ)音處理的三方庫(kù)Speexdsp到OpenHarmon
    的頭像 發(fā)表于 05-16 10:18 ?1861次閱讀
    使用<b class='flag-5'>OpenHarmony</b>NDK<b class='flag-5'>移植</b><b class='flag-5'>三方</b><b class='flag-5'>庫(kù)</b>Speexdsp

    快速移植OpenHarmony三方芯片平臺(tái)的方法

    HDF等)的移植。詳細(xì)步驟在接下來(lái)的章節(jié)中介紹。移植三方芯片平臺(tái)的步驟下面以樹(shù)莓派3b (BCM2837) 為例,演示將OpenHarmony移植
    發(fā)表于 04-12 11:08

    4步成功將三方庫(kù)——speexdsp移植OpenHarmony

    歸)進(jìn)行分享,他在完成了一個(gè)三方庫(kù)OpenHarmony標(biāo)準(zhǔn)系統(tǒng)上的移植工作后,總結(jié)了以下經(jīng)驗(yàn)。四步實(shí)現(xiàn)三方
    發(fā)表于 09-27 12:02

    OpenHarmony三方庫(kù)適配指南

    本文以OpenHarmony-3.2-Beta4上適配modbus編譯動(dòng)態(tài)庫(kù)為例。獲取三方庫(kù)使用之前要做好代碼溯源,確認(rèn)可用的版本,開(kāi)源許可和發(fā)布方式等。通過(guò)正確的路徑獲取源碼,可以是
    發(fā)表于 04-07 09:12

    OpenAtom OpenHarmony 三方庫(kù)創(chuàng)建發(fā)布及安全隱私檢測(cè)

    OpenAtom OpenHarmony三方庫(kù)(以下簡(jiǎn)稱(chēng)“三方庫(kù)”或“包”),是經(jīng)過(guò)驗(yàn)證可在OpenHa
    發(fā)表于 11-13 17:27

    openharmony三方組件適配移植易于使用的ohos庫(kù)

    項(xiàng)目介紹 項(xiàng)目名稱(chēng):MaterialScrollBar 所屬系列:openharmony的第三方組件適配移植 功能:易于使用的ohos庫(kù),可輕松實(shí)現(xiàn)滾動(dòng)跟隨效果 項(xiàng)目
    發(fā)表于 03-30 10:44 ?0次下載

    openharmony三方組件適配移植的多選列表功能庫(kù)教程

    項(xiàng)目介紹 項(xiàng)目名稱(chēng):drag-select-recyclerview 所屬系列:openharmony的第三方組件適配移植 功能:drag-select-recyclerview是一個(gè)簡(jiǎn)單的多選列表
    發(fā)表于 03-30 10:48 ?1次下載

    openharmony三方組件適配移植的股價(jià)圖表庫(kù)

    項(xiàng)目介紹 項(xiàng)目名稱(chēng):ikvStockChart 所屬系列:openharmony的第三方組件適配移植 功能:ikvStockChart一個(gè)簡(jiǎn)單的openharmony圖表
    發(fā)表于 04-01 09:30 ?2次下載

    openharmony三方組件適配移植的圖表功能庫(kù)

    項(xiàng)目介紹 項(xiàng)目名稱(chēng):achartengine 所屬系列:openharmony的第三方組件適配移植 功能:achartengine是應(yīng)用程序的圖表庫(kù)。它目前支持以下圖表類(lèi)型:折線圖、面
    發(fā)表于 04-01 09:40 ?1次下載

    openharmony三方組件適配移植的SVGA動(dòng)畫(huà)渲染庫(kù)

    項(xiàng)目介紹 項(xiàng)目名稱(chēng):SVGAPlayer-Ohos 所屬系列:openharmony的第三方組件適配移植 功能:SVGAPlayer-Ohos 是一個(gè)輕量的動(dòng)畫(huà)渲染庫(kù)。你可以使用工具從
    發(fā)表于 04-02 11:47 ?15次下載

    openharmony三方組件適配移植的okhttp教程案例

    項(xiàng)目介紹 項(xiàng)目名稱(chēng):okhttp 所屬系列:openharmony的第三方組件適配移植 功能:PUT,DELETE,POST,GET等請(qǐng)求、文件的上傳下載、加載圖片(內(nèi)部會(huì)圖片大小自動(dòng)壓縮)、支持
    發(fā)表于 04-12 09:25 ?4次下載

    openharmony三方組件適配移植的數(shù)據(jù)庫(kù)組件

    項(xiàng)目介紹 項(xiàng)目名稱(chēng):DBFlow 所屬系列:openharmony的第三方組件適配移植 功能:DBFlow是一個(gè)快速、高效、功能豐富數(shù)據(jù)庫(kù)組件 項(xiàng)目
    發(fā)表于 04-13 09:56 ?2次下載

    總結(jié)移植三方庫(kù)OpenHarmony的經(jīng)驗(yàn)

    三方庫(kù)主要是基于標(biāo)準(zhǔn) Linux 系統(tǒng)的 c/c++ 開(kāi)源庫(kù),所以三方庫(kù)移植工作,首先是在標(biāo)準(zhǔn)
    的頭像 發(fā)表于 05-07 15:52 ?5842次閱讀

    鴻蒙三方庫(kù)適配指南

    本文以 OpenHarmony-3.2-Beta4 上適配 modbus 編譯動(dòng)態(tài)庫(kù)為例。 獲取三方庫(kù) 使用之前要做好代碼溯源,確認(rèn)可用的版本,開(kāi)源許可和發(fā)布方式等。 通過(guò)正確的路徑獲
    的頭像 發(fā)表于 02-14 09:33 ?3222次閱讀

    【開(kāi)源三方庫(kù)】bignumber.js:一個(gè)大數(shù)數(shù)學(xué)庫(kù)

    點(diǎn)擊藍(lán)字 ╳ 關(guān)注我們 開(kāi)源項(xiàng)目 OpenHarmony 是每個(gè)人的 OpenHarmony OpenAtom OpenHarmony (以下簡(jiǎn)稱(chēng)“OpenHarmony”)
    的頭像 發(fā)表于 08-18 21:05 ?832次閱讀