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

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

参考资料

文档中心

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/74197.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Selenium Web UI自动化测试:从入门到实战

引言 在当今快速迭代的软件开发周期中&#xff0c;自动化测试已成为保障产品质量、提升测试效率的核心手段之一。而针对Web应用的UI自动化测试&#xff0c;Selenium作为最流行的开源工具之一&#xff0c;凭借其跨浏览器、多语言支持&#xff08;Python、Java、C#等&#xff09…

Java 大视界 -- Java 大数据中的数据隐私保护技术在多方数据协作中的应用(147)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

编程考古-安德斯·海尔斯伯格(Anders Hejlsberg)回答离开Borland的原因

安德斯海尔斯伯格&#xff08;Anders Hejlsberg&#xff09;是著名的编程语言和工具开发者&#xff0c;曾主导开发了 Turbo Pascal、Delphi&#xff08;Borland 时期&#xff09;&#xff0c;以及加入微软后参与的 C# 和 TypeScript。关于他离开 Borland 的原因&#xff0c;可以…

西门子仿真实例位置

C:\Users\san\Documents\Siemens\Simatic\Simulation\Runtime\Persistence S7-PLCSIM Advanced V3.0 可以打开文件&#xff0c;删除重建

【数据库系统原理】Ch7 数据库应用设计与开发实例

目录 大纲7.1 需求描述与分析7.2 系统设计7.3 系统实现7.4 系统测试与维护 习题真题2024-102024-042023-102023-042022-10 大纲 7.1 需求描述与分析 熟悉需求描述与分析的方法,达到"领会"层次。 7.2 系统设计 熟悉根据需求的描述划分系统的功能模块,能够进行初步…

使用 Python 的turtle库绘制精美图形

在 Python 编程的世界里&#xff0c;turtle库是一个非常有趣且实用的工具&#xff0c;它为初学者和有经验的开发者提供了一个简单而直观的方式来进行图形绘制。本文将详细讲解如何使用turtle库绘制不同的图形&#xff0c;包括六边形、一个特定的多边形&#xff0c;以及一个由线…

基于linux平台的C语言入门教程(5)基本数据类型

文章目录 1. 什么是数据类型&#xff1f;2. C 语言的基本数据类型3. 数据类型的存储大小4. 示例代码代码解析&#xff1a;输出结果&#xff1a; 5. 常见问题问题 1&#xff1a;float 和 double 的区别是什么&#xff1f;问题 2&#xff1a;unsigned 类型可以存储负数吗&#xf…

Bellman_ford 算法——解决负权边最短路径问题

卡码网:94. 城市间货物运输 I 94. 城市间货物运输 I 题目描述 某国为促进城市间经济交流,决定对货物运输提供补贴。共有 n 个编号为 1 到 n 的城市,通过道路网络连接,网络中的道路仅允许从某个城市单向通行到另一个城市,不能反向通行。 网络中的道路都有各自的运输成本…

mysql——第二课

学生表 CREATE TABLE student (id int(11) NOT NULL AUTO_INCREMENT,name varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,sex varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,age int(11) DEFAULT NULL,c_id int(10) DEFAULT NULL,PRIMARY KEY (id),KEY c_id (c_id),CONSTR…

图解 ThreadLocal

在 Java 多线程编程的世界里&#xff0c;ThreadLocal 是一个非常实用的工具&#xff0c;它为每个线程提供了独立的变量副本&#xff0c;避免了多线程环境下的变量共享问题。今天&#xff0c;我们就从内存视角出发&#xff0c;通过一张图来深入理解 ThreadLocal 的工作原理&…

Sql Server 索引性能优化 分析以及分表

定位需优化语句 根据工具 skywking 或者开启慢查询日志 找到 慢sql 的语句根据 执行过程 来 判断 慢的原因 row filter 指标 看查了多少数据 比例多少 type 看下是单表 还是 join联表 比如 执行步骤多 没索引 优化方向 减少执行次数索引 没索引考虑加索引 加索引 尽量选择 i…

@JsonSerialize注解

1.简介 JsonSerialize注解可以自定义改变返回前端的内容,比如:将Student实体类的age字段的值在返回前端之前,由20改为21. 要用到jackson-databind依赖包,在Spring Boot项目中&#xff0c;默认已经集成了Jackson&#xff0c;因此你不需要手动引入Jackson库。 2.上例子 将Stud…

Java面试黄金宝典5

1. ConcurrentHashMap 和 HashTable 有哪些区别 原理 HashTable&#xff1a;它继承自 Dictionary 类&#xff0c;是 Java 早期提供的线程安全哈希表。其线程安全的实现方式是对每个方法都使用 synchronized 关键字进行同步。例如&#xff0c;在调用 put、get 等方法时&#xff…

vim的一般操作(分屏操作) 和 Makefile 和 gdb

目录 一. vim的基本概念 二. vim基础操作 2.1 插入模式 aio 2.2 [插入模式]切换至[正常模式] Esc 2.3[正常模式]切换至[末行模式] shift ; 2.4 替换模式 Shift R 2.5 视图&#xff08;可视&#xff09;模式 (可以快速 删除//注释 或者 增加//注释) ctrl v 三&…

Linux:基础IO---文件描述符

文章目录 1. 前言1.1 C语言文件知识回顾 2. 文件2.1 文件基础知识 3. 被打开的文件3.1 以C语言为主&#xff0c;先回忆一下C文件接口3.2 过渡到系统&#xff0c;认识文件系统调用3.3 访问文件的本质3.4 重定向&&缓冲区 序&#xff1a;在深入了解了进程的内容后&#xf…

2025年十大AI工具对比

2025年十大AI工具对比 以下是2025年各大AI工具的详细对比&#xff0c;涵盖性能、功能、用户评价等方面&#xff0c;并以表格形式呈现。数据来源于多个权威来源&#xff0c;确保信息全面且准确。 对比表格 排名AI工具名称主要功能性能特点用户评价适用场景1DeepSeek多模态AI、…

JDK 24 发布,新特性解读!

一、版本演进与技术格局新动向 北京时间3月20日&#xff0c;Oracle正式发布Java SE 24。作为继Java 21之后的第三个非LTS版本&#xff0c;其技术革新力度远超预期——共集成24项JEP提案&#xff0c;相当于Java 22&#xff08;12项&#xff09;与Java 23&#xff08;12项&#…

批量图片压缩工具,高效减小文件大小并保持质量

在处理大量图片时&#xff0c;如何高效压缩文件大小并保持画质是个常见难题。今天为大家推荐一款专业工具——JPGC&#xff0c;它专为图片批量处理设计&#xff0c;能快速压缩JPG/JPEG格式图片&#xff0c;在减小文件体积的同时尽可能保留画质&#xff0c;尤其适合处理数码相机…

【002安卓开发方案调研】之Kotlin+Jetpack开发方案

基于2025年国内移动开发领域的现状&#xff0c;结合Jetpack Compose的技术特性和生态发展&#xff0c;以下是对KotlinJetpack Compose开发安卓应用的综合分析&#xff1a; 一、技术与生态成熟度评估 1. 技术成熟度 声明式UI与开发效率 Jetpack Compose采用声明式编程模型&…

软考中级-软件设计师 准备

软考中级-软件设计师 准备 一、软考相关1.1、考试时间1.2、考试时长1.3、题型和分值&#xff1a; 二、软考备考2.1、相关书籍2.2、推荐课程&#xff1a;B站up主zst_20012.3、学习路线 一、软考相关 1.1、考试时间 一年有两次软考&#xff0c;一般是五月末和十一月的中旬 以下…