这几天搞鸿蒙,需要编译一些第三方库到鸿蒙系统使用。
头疼死了,搞了一个多星期总算搞定了。
开贴记坑。
一、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文件,一切正常。
今天先写到这里,明天将常见的库都编译出来,帖子会继续更新。