OpenHarmony 开源鸿蒙北向开发——linux使用make交叉编译第三方库

发布于:2025-03-23 ⋅ 阅读:(27) ⋅ 点赞:(0)

这几天搞鸿蒙,需要编译一些第三方库到鸿蒙系统使用。

头疼死了,搞了一个多星期总算搞定了。

开贴记坑。

 一、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文件,一切正常。

今天先写到这里,明天将常见的库都编译出来,帖子会继续更新。

参考资料

文档中心