当前位置: 首页 > news >正文

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

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

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

开贴记坑。

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

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

参考资料

文档中心

相关文章:

  • 计算机四级 - 数据库原理(操作系统部分)- 第3章「进程线程模型」
  • 数据结构-------栈
  • AJAX的理解和原理还有概念
  • AI综合应用及办公应用
  • 工业控制系统中的信号传输格式解析
  • 函数闭包的学习
  • [JavaScript]如何利用作用域块避免闭包内存泄漏?
  • Moonlight-16B-A3B: 变革性的高效大语言模型,凭借Muon优化器打破训练效率极限
  • DNS缓存使用中有什么问题?DNS缓存有哪些作用?
  • 蓝桥杯day2:解码异或 后的数组
  • test_cases测试用例层/test_1_login
  • ubuntu中的环境变量文件 bashrc、profile、environment简要总结
  • 【Java篇】一气化三清:类的实例化与封装的智慧之道
  • 口袋书签功能上新,免费使用
  • 网络华为HCIA+HCIP AAA原理与配置
  • 8.4《同一直线上二力的合成》
  • Linux下Redis哨兵集群模式搭建(1主2从+3哨兵)
  • Python实现WYY音乐下载
  • 机器学习快速入门教程
  • 设计模式工厂模式和单例模式结合
  • 国务院安委办、应急管理部进一步调度部署“五一”假期安全防范工作
  • 白云山一季度营收净利双降,此前称今年将挖掘盘活自身资源
  • 言短意长|新能源领军者密集捐赠母校
  • 第五届全国医院人文管理路演在昆山举办:患者体验才是温度计
  • 修订占比近30%收录25万条目,第三版《英汉大词典》来了
  • 2025上海浪琴环球马术冠军赛开赛在即,首批赛马今晨抵沪