這幾天搞鴻蒙,需要編譯一些第三方庫到鴻蒙系統使用。
頭疼死了,搞了一個多星期總算搞定了。
開貼記坑。
?一、SDK下載
1.下載
在linux下使用命令
wget https://cidownload.openharmony.cn/version/Master_Version/OpenHarmony_5.1.0.54/20250313_021647/version-Master_Version-OpenHarmony_5.1.0.54-20250313_021647-ohos-sdk-public.tar.gz
下載完成的結果是這樣的?
2.解壓?
我們將其放到需要的位置,然后解壓
tar -zxvf version-Master_Version-OpenHarmony_5.1.0.54-20250313_021647-ohos-sdk-public.tar.gz
解壓出來的結果是這樣的
我們選擇linux文件夾進入
使用如下命令講所有的壓縮包解壓
for i in *.zip;do unzip ${i};done
解壓后的結果
二、配置SDK
1.配置工具包
我們解壓完成之后,記錄一下sdk目錄,用于配置后邊的編譯工具
/home/nanqiu/Desktop/OpenHarmony/build_thirtypart/sdk/14/linux
2.添加權限
然后返回上層,我們給整個sdk目錄添加一個可執行權限
chmod 777 sdk目錄
3.配置環境變量
export OHOS_SDK=/home/nanqiu/Desktop/OpenHarmony/build_thirtypart/sdk/14/linux ## 配置SDK路徑,此處需配置成自己的sdk解壓目錄
export AS=${OHOS_SDK}/native/llvm/bin/llvm-as
export CC="${OHOS_SDK}/native/llvm/bin/clang --target=aarch64-linux-ohos" ## 32bit的target需要配置成 --target=arm-linux-ohos
export CXX="${OHOS_SDK}/native/llvm/bin/clang++ --target=aarch64-linux-ohos" ## 32bit的target需要配置成 --target=arm-linux-ohos
export LD=${OHOS_SDK}/native/llvm/bin/ld.lld
export STRIP=${OHOS_SDK}/native/llvm/bin/llvm-strip
export RANLIB=${OHOS_SDK}/native/llvm/bin/llvm-ranlib
export OBJDUMP=${OHOS_SDK}/native/llvm/bin/llvm-objdump
export OBJCOPY=${OHOS_SDK}/native/llvm/bin/llvm-objcopy
export NM=${OHOS_SDK}/native/llvm/bin/llvm-nm
export AR=${OHOS_SDK}/native/llvm/bin/llvm-ar
export CFLAGS="-fPIC -D__MUSL__=1" ## 32bit需要增加配置 -march=armv7a
export CXXFLAGS="-fPIC -D__MUSL__=1" ## 32bit需要增加配置 -march=armv7a
這里需要OHOS_SDK配置為咱們之前記錄的目錄。
4.確認開發板所需的命令架構
我們先進入鴻蒙開發板。
博主這里吃了個大坑,硬生生卡了好幾天,幸虧公司大佬出手才渡本菜雞破此劫。
輸入如下指令
file /system/bin/iptables
確定一下這里的參數是32還是64
講一下為什么要這么干
之前博主編譯的時候,使用uname -a,得到的是64位
于是就按照64位編譯,結果編譯出來的結果在開發板上運行時報錯。
很奇怪,卡很久。
后來才知道,開發板雖然是64位,但是庫卻需要編譯成32位。
這也就是為什么要確認這一步的原因。
學到了!
但是在這一點上,本菜雞不知道為什么,各位如有知道,還望告知。
三、下載第三方庫源碼
這里咱們不著急,先編譯個helloworld。
1.HelloWorld
(1)寫一個代碼
我們新建一個hello.c,內容如下,記得保存
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
(2)編譯
我們用如下命令對hello.c進行編譯
sdk目錄/linux/native/llvm/bin/clang --target=arm-linux-ohos -o hello hello.c
這里的arm-linux-ohos 表示32位架構,64位使用aarch64-linux-ohos
編譯后會得到一個hello文件
(3)檢查
我們使用如下命令檢查編譯出來的對不對
file hello
如果和咱們之前在開發板上得到的一樣,就可以了。?
?(4)運行
我們使用壓縮該文件
tar -cvzf hello.tar.gz hello
我們將其打包發到開發板上。
我這里是將其挪到window下,然后使用hdc工具下發的。
在hdc工具上使用如下命令
hdc file send hello.tar.gz 目標地址
開發板上可以看到
我們解壓該文件
tar -zvxf hello.tar.gz
給hello加一個可執行權限
chmod +x hello
運行hello文件,一切正常。
今天先寫到這里,明天將常見的庫都編譯出來,帖子會繼續更新。
參考資料
文檔中心