Linux下使用Android NDK toolchain編譯kaldi

Outline:

a) ndk下載&ndk-toolchain提取

b) kaldi編譯

c) android ndk-toolchain編譯kaldi

一、NDK下載及ndk-toolchain提取

ndk下載地址:Android-ndk?下載后解壓得到android-ndk-r18b文件夾炫惩;進(jìn)入目錄build-->tools下纤掸,執(zhí)行python make_standalone_toolchain.py腳本兼蕊,配合參數(shù):--arch arm --api 21 --install-dir /expected rootdir/android-toolchain 即可提取出android-toolchain鏈接工具。參數(shù)含義及關(guān)于該提取步驟更詳細(xì)內(nèi)容參見:Android NDK獨(dú)立工具鏈?參考博客? 使用該toolchain編譯C++工程時會遇到錯誤:找不到文件crtbegin_so.o和crtend_so.o稚照,解決方法見:https://blog.csdn.net/qiaoliang328/article/details/50965215?[除此之外還遇到過stderr不識別的錯誤揭斧,但后期用先前的toolchain就沒問題了]

二、Kaldi下載編譯

kaldi下載地址:Kaldi?git clone進(jìn)入kaldi文件夾崇棠。先是在tools目錄下編譯,后再去到src目錄下編譯丸卷。具體分別編譯細(xì)則可參考對應(yīng)目錄下的INSTALL文件枕稀。

A)執(zhí)行./tools/extras/check_dependencies.sh。若出現(xiàn)“./check_dependencies.sh:all ok.”則此步驟結(jié)束谜嫉。

在check dependencies時我遇到了錯誤:大意是系統(tǒng)沒有安裝mkl萎坷,并提示使用exrtas/install_mkl.sh腳本安裝(運(yùn)行此腳本需要使用sudo權(quán)限)。但執(zhí)行此腳本時有遇到了錯誤如圖:

此問題的出現(xiàn)是因?yàn)閕nstall_mkl.sh腳本有執(zhí)行到“apt-get update”指令沐兰,該問題的解決方法可參考執(zhí)行sudo apt-get update報錯解決

B) cd回到tools目錄下哆档,執(zhí)行make指令(也可執(zhí)行make -j 4指令使用多線程,具體參見tools下的INSTALL文件)住闯,直到出現(xiàn)“All done OK.”表示編譯完成且成功瓜浸。

C) 進(jìn)入src目錄澳淑,總體編譯過程參照該目錄下的INSTALL文件。具體來說:首先執(zhí)行./configure --shared插佛,沒有提示錯誤則執(zhí)行make depend -j 8(“8”這個數(shù)量根據(jù)自己電腦硬件條件適當(dāng)更改)杠巡,最后執(zhí)行make -j 8。當(dāng)出現(xiàn)“Done”時說明編譯完成且成功雇寇。

D) 測試安裝是否成功

可用yesno工程測試kaldi安裝是否成功氢拥,具體地:cd /kaldi-dir/egs/yesno/s5/然后執(zhí)行./run.sh 成功運(yùn)行后會顯示如圖信息:

kaldi安裝后運(yùn)行yesno工程成功的最后顯示信息

E) 卸載kaldi

需先在src目錄下make clean,然后刪除整個kaldi文件夾锨侯。

三嫩海、toolchain編譯kaldi

A) 編譯OpenBLAS

首先下載OpenBLAS(提供個GitHub的repo: https://github.com/xianyi/OpenBLAS.git)并用ndk-toolchain去編譯openblas,步驟可參考wiki?, 此步驟完成后最終要獲得libopenblas.a囚痴。具體地:

CLANG_FLAGS="-target arm-linux-androideabi -marm -mfpu=vfp -mfloat-abi=softfp --sysroot /ndk-toolchain-path/sysroot -gcc-toolchain /ndk-toolchain-path/"

make-C /openblas-dir/ TARGET=ARMV7 ONLY_CBLAS=1 AR=ar CC="clang ${CLANG_FLAGS}" HOSTCC=gcc ARM_SOFTFP_ABI=1 USE_THREAD=0 NUM_THREADS=32 -j4

make-C /openblas-dir/ install NO_SHARED=1 PREFIX=/openblas-dir/install

B) 編譯clapack

提供參考GitHub repo:https://github.com/simonlynen/android_libs.git?叁怪。里面有clapack,編譯時首先注釋掉/lapack/jni/Android.mk中關(guān)于測試部分的內(nèi)容:

LOCAL_MODULE:= testlapack

LOCAL_SRC_FILES:= testclapack.cpp

LOCAL_STATIC_LIBRARIES := lapack

include $(BUILD_SHARED_LIBRARY)

然后使用ndk-build編譯這個工程渡讼,上述過程步驟如下圖:

ndk-build clapack工程步驟腳本

該步驟會遇到一些問題骂束,主要如下(根據(jù)編譯過程的報錯信息均可較容易地找到問題并改正):

1、修改/lapack/AndroidManifest.xml中的android:minSdkVersion="10", 把10改為16成箫;

2展箱、修改/lapack/project.properties中的target=android-10, 把-10改為-16;

3蹬昌、修改/lapack/jni/Application.mk中的APP_STL:=gnustl_static, 把gnustl-static改為c++_static; APP_ABI:=armeabi armeabi-v7a ,把a(bǔ)rmeabi去掉只保留armeabi-v7a混驰;

最后將clapack生成的blas,lapack皂贩,clapack栖榨,f2c四個庫拷貝到openblas安裝目錄下的lib中,kaldi會自動配置到kaldi.mk中作為鏈接庫(此步驟最終目的是獲得libblas.a,libf2c.a,libclapack.a,liblapack.a)明刷。

將clapack生成的blas婴栽,lapack,clapack辈末,f2c四個庫拷貝到openblas安裝目錄下的lib中

C) 安卓編譯Kaldi

不同于“二”中介紹的Linux下kaldi的安裝編譯愚争,此處介紹的是安卓編譯kaldi的過程。操作中挤聘,在此步驟需要額外分配一個路徑給kaldi轰枝,不可與已有的Linux編譯好的kaldi位置沖突。

tools目錄下主要涉及到openfst和cub的編譯(此步驟最后要獲得libfst.a):

kaldi tools下的openfst安裝和cub安裝

接下來是src目錄下編譯组去,此過程最后要產(chǎn)生一堆相關(guān).a文件鞍陨。具體步驟如圖:

kaldi src目錄下的編譯流程

最后需要把$NDK_TOOLCHAIN_PATH/arm-linux-androideabi/lib/armv7-a/libc++_shared.so軟鏈到上述所有.a文件所在的目錄下(一般命名為lib)。全部編譯完該lib目錄下的所有文件如下圖:

安卓編譯kaldi完成后从隆,生成的所有所需文件
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末诚撵,一起剝皮案震驚了整個濱河市缭裆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌砾脑,老刑警劉巖幼驶,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異韧衣,居然都是意外死亡盅藻,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進(jìn)店門畅铭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來氏淑,“玉大人,你說我怎么就攤上這事硕噩〖俨校” “怎么了?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵炉擅,是天一觀的道長辉懒。 經(jīng)常有香客問我,道長谍失,這世上最難降的妖魔是什么眶俩? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮快鱼,結(jié)果婚禮上颠印,老公的妹妹穿的比我還像新娘。我一直安慰自己抹竹,他們只是感情好线罕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著窃判,像睡著了一般钞楼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上袄琳,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天窿凤,我揣著相機(jī)與錄音,去河邊找鬼跨蟹。 笑死,一個胖子當(dāng)著我的面吹牛橘沥,可吹牛的內(nèi)容都是我干的窗轩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼座咆,長吁一口氣:“原來是場噩夢啊……” “哼痢艺!你這毒婦竟也來了仓洼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤堤舒,失蹤者是張志新(化名)和其女友劉穎色建,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舌缤,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡箕戳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了国撵。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片陵吸。...
    茶點(diǎn)故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖介牙,靈堂內(nèi)的尸體忽然破棺而出壮虫,到底是詐尸還是另有隱情,我是刑警寧澤环础,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布囚似,位于F島的核電站,受9級特大地震影響线得,放射性物質(zhì)發(fā)生泄漏饶唤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一框都、第九天 我趴在偏房一處隱蔽的房頂上張望搬素。 院中可真熱鬧,春花似錦魏保、人聲如沸熬尺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽粱哼。三九已至,卻和暖如春檩咱,著一層夾襖步出監(jiān)牢的瞬間揭措,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工刻蚯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绊含,地道東北人。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓炊汹,卻偏偏與公主長得像躬充,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容