OpenHarmony实战:Makefile方式组织编译的库移植

以yxml库为例,其移植过程如下文所示。

源码获取

从仓库获取yxml源码,其目录结构如下表:

表1 源码目录结构

名称描述
yxml/bench/benchmark相关代码
yxml/test/测试输入输出文件,及测试脚本
yxml/Makefile编译组织文件
yxml/.gitattributes-
yxml/.gitignore-
yxml/COPYING-
yxml/yxml.c-
yxml/yxml.c.in-
yxml/yxml-gen.pl-
yxml/yxml.h-
yxml/yxml.md-
yxml/yxml-states-

设置交叉编译

设置Makefile的交叉编译工具链,修改并编译该库,生成OpenHarmony平台的可执行文件,步骤如下:

  1. 设置工具链 将下列clang工具链配置替换掉yxml库根目录的Makefile(即表1中的文件)中的原有配置。

    clang工具链配置:

    #设置交叉编译工具链,确保工具链所在路径已经添加到了PATH环境变量中
    CC:=clang
    AR:=llvm-ar
    #cflags中必须要添加--target及--sysroot选项
    CFLAGS:=-Wall -Wextra -Wno-unused-parameter -O2 -g --target=arm-liteos -march=armv7-a -mfloat-abi=softfp -mcpu=cortex-a7 -mfpu=neon-vfpv4 --sysroot=$(OHOS_SYSROOT_PATH)

    原有配置:

    CC:=gcc
    AR:=ar
    CFLAGS:=-Wall -Wextra -Wno-unused-parameter -O2 -g
  2. 执行编译 linux命令行中进入yxml的源文件目录(即图1所示目录),执行下列命令:

    make test OHOS_SYSROOT_PATH=...

    其中OHOS_SYSROOT_PATH需用绝对路径指定出sysroot所在目录,以OpenHarmony为例即源码根目录下out/hispark_xxx/ipcamera_hispark_xxx/sysroot目录的绝对路径。上述目录会在全量编译后生成,因此移植前先完成一次全量编译。

  3. 查看结果 步骤2操作完成后,yxml下会生成out目录,里面有静态库文件和测试用例:

    表2 yxml编译生成目录

    名称描述
    OpenHarmony/third_party/yxml/yxml/out/lib/编译生成的静态库的存放目录
    OpenHarmony/third_party/yxml/yxml/out/test/编译生成的测试用例及其输入输出等文件的存放目录

测试

yxml库测试步骤与double-conversion库基本一致,可参考CMake方式组织编译的库移植的测试过程,以下内容介绍yxml库测试用例的使用方法:

表3 生成的test目录结构示意

名称描述
OpenHarmony/third_party/yxml/yxml/out/test/test.sh自动化测试脚本,由于OpenHarmony不支持脚本运行,因此无法使用,可参考其内容手动测试
OpenHarmony/third_party/yxml/yxml/out/test/test用于测试的可执行文件
OpenHarmony/third_party/yxml/yxml/out/test/*.xml测试输入文件
OpenHarmony/third_party/yxml/yxml/out/test/*.out期望的输出文件

test.sh内容如下所示:

#!/bin/sh
for i in *.xml; dob=`basename $i .xml`o=${b}.outt=${b}.test./test <$i >$tif [ -n "`diff -q $o $t`" ]; thenecho "Test failed for $i:"diff -u $o $texit 1fi
done
echo "All tests completed successfully."

由于OpenHarmony的shell中暂不支持输入输出重定向(<和>),所以测试时需要将输入*.xml文件内容直接复制进shell后回车,输出内容会直接展示在shell窗口。过程如下:

下列操作假定已按照2.4节的步骤搭建OpenHarmony,挂载并进入nfs目录:

  1. 执行下列命令

    ./test
  2. 复制*.xml内容到shell 以表3test目录下pi01.xml为例,内容如下,输入到shell并回车:

    <?SomePI abc?><a/>
  3. 比较shell中输出的内容与表3test目录中对应的*.out文件是否一致 输出结果如下:

    pistart SomePI
    picontent abc
    piend
    elemstart a
    elemend
    ok

    经比较与表3test目录下pi01.out内容一致,测试通过。

将该库编译添加到OpenHarmony工程中

yxml库添加的过程除了适配文件build.gn和config.gni有些许变化外,其他和double-conversion库完全一致,参考CMake方式组织编译的库移植的配置过程。要修改的适配文件及添加后的目录结构如下:

  • yxml库新增的BUILD.gn实现如下:
import("config.gni")
group("yxml") {if (ohos_build_thirdparty_migrated_from_fuchisa == true) {deps = [":make"]}
}
if (ohos_build_thirdparty_migrated_from_fuchisa == true) {action("make") {script = "//third_party/yxml/build_thirdparty.py"outputs = ["$target_out_dir/log_yxml.txt"]exec_path = rebase_path(rebase_path("./yxml", root_build_dir))command = "make clean && $MAKE_COMMAND"args = ["--path=$exec_path","--command=${command}"]}
}
  • yxml库新增的config.gni配置如下:
TEST_ENABLE = "YES"if (TEST_ENABLE == "YES") {MAKE_COMMAND = "make test OHOS_SYSROOT_PATH=${root_out_dir}sysroot/"
} else {MAKE_COMMAND = "make OHOS_SYSROOT_PATH=${root_out_dir}sysroot/"
}
  • 添加完成后目录结构示意:

    表4 添加到工程后的目录结构

名称描述
OpenHarmony/third_party/yxml/BUILD.gn将三方库加入工程的gn适配文件
OpenHarmony/third_party/yxml/build_thirdparty.pyGN调用shell命令脚本文件,由上面GN文件将相关命令传入,实现GN转Makefile
OpenHarmony/third_party/yxml/config.gni三方库编译配置文件,可修改该文件来配置用例是否参与构建等
OpenHarmony/third_party/yxml/yxml/要移植的三方库目录

最后

有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)资料用来跟着学习是非常有必要的。 

这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。

希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!

获取这份完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

鸿蒙(HarmonyOS NEXT)最新学习路线

  •  HarmonOS基础技能

  • HarmonOS就业必备技能 
  •  HarmonOS多媒体技术

  • 鸿蒙NaPi组件进阶

  • HarmonOS高级技能

  • 初识HarmonOS内核 
  • 实战就业级设备开发

有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。

获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

《鸿蒙 (OpenHarmony)开发入门教学视频》

《鸿蒙生态应用开发V2.0白皮书》

图片

《鸿蒙 (OpenHarmony)开发基础到实战手册》

OpenHarmony北向、南向开发环境搭建

图片

 《鸿蒙开发基础》

  • ArkTS语言
  • 安装DevEco Studio
  • 运用你的第一个ArkTS应用
  • ArkUI声明式UI开发
  • .……

图片

 《鸿蒙开发进阶》

  • Stage模型入门
  • 网络管理
  • 数据管理
  • 电话服务
  • 分布式应用开发
  • 通知与窗口管理
  • 多媒体技术
  • 安全技能
  • 任务管理
  • WebGL
  • 国际化开发
  • 应用测试
  • DFX面向未来设计
  • 鸿蒙系统移植和裁剪定制
  • ……

图片

《鸿蒙进阶实战》

  • ArkTS实践
  • UIAbility应用
  • 网络案例
  • ……

图片

 获取以上完整鸿蒙HarmonyOS学习资料,请点击→纯血版全套鸿蒙HarmonyOS学习资料

总结

总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,他们才能在这个变革的时代中立于不败之地。 

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

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

相关文章

水果销售(源码+文档)

水果销售管理系统&#xff08;小程序、ios、安卓都可部署&#xff09; 文件包含内容程序简要说明含有功能项目截图客户端添加地址首页商品详细意见反馈待发货商品分类我的代付款我的地址搜索防骗指南资料修改登录注册 后端管理分类管理反馈管理订单管理商品管理用户管理 文件包…

搜索与图论——拓扑排序

有向图的拓扑排序就是图的宽度优先遍历的一个应用 有向无环图一定存在拓扑序列&#xff08;有向无环图又被称为拓扑图&#xff09;&#xff0c;有向有环图一定不存在拓扑序列。无向图没有拓扑序列。 拓扑序列&#xff1a;将一个图排成拓扑序后&#xff0c;所有的边都是从前指…

C 字符串

在 C 语言中&#xff0c;字符串实际上是使用空字符 \0 结尾的一维字符数组。因此&#xff0c;\0 是用于标记字符串的结束。 空字符&#xff08;Null character&#xff09;又称结束符&#xff0c;缩写 NUL&#xff0c;是一个数值为 0 的控制字符&#xff0c;\0 是转义字符&…

CAD Plant3D 2023 下载地址及安装教程

CAD Plant3D是一款专业的三维工厂设计软件&#xff0c;用于在工业设备和管道设计领域进行建模和绘图。它是Autodesk公司旗下的AutoCAD系列产品之一&#xff0c;专门针对工艺、石油、化工、电力等行业的设计和工程项目。 CAD Plant3D提供了一套丰富的工具和功能&#xff0c;帮助…

计算机网络-HTTP相关知识-HTTP的发展

HTTP/1.1 特点&#xff1a; 简单&#xff1a;HTTP/1.1的报文格式包括头部和主体&#xff0c;头部信息是键值对的形式&#xff0c;使得其易于理解和使用。灵活和易于扩展&#xff1a;HTTP/1.1的请求方法、URL、状态码、头字段等都可以自定义和扩展&#xff0c;使得其具有很高的…

docker------docker入门

&#x1f388;个人主页&#xff1a;靓仔很忙i &#x1f4bb;B 站主页&#xff1a;&#x1f449;B站&#x1f448; &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;Linux &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#…

好用的Android Studio插件管理器

1.使用阿里云的通义灵码方便快速开发 1.1下载插件File->plugin->marketplace 搜索 Tongyilingma然后安装重启登录阿里云&#xff0c;确认 1.2 使用方法 输入信息描述 比如 //写一段冒泡排序然后换行&#xff0c;输入public/private/protected方法会自动生成联想代码…

机器学习——几个线性模型的简介

目录 形式 假设 一元回归例子理解最小二乘法 多元回归 广义线性回归 对数线性回归 逻辑回归 线性判别分析 形式 线性说白了就是初中的一次函数的一种应用&#xff0c;根据不同的(x,y)拟合出一条直线以预测&#xff0c;从而解决各种分类或回归问题&#xff0c;假设有 n …

03原理图:接口、无线、电机、STM32主控、整体模块化设计总结

接口部分 一、TTL 转 USB 驱动电路设计 方案很多&#xff0c;本设计采用的芯片是 CH340E 。 该芯片内部已经集成了振荡器&#xff0c;不需要外部增加晶振。如果其他型号的芯片内部没有振荡器&#xff0c;则外面需要加一个晶振。 再看这篇笔记的时候&#xff0c;你可能有点懵…

蓝桥杯第十三届电子类单片机组决赛程序设计

前言 一、决赛题目 1.比赛题目 2.题目解读 二、功能实现 1.关于定时器资源 1&#xff09;超声波和NE555需要的定时器资源 2&#xff09;定时器2 2.单位切换 3.数据长度不足时&#xff0c;高位熄灭 4.AD/DA多通道的处理 5.PWM输出 6.长按功能的实现 三、完整代码演…

Qt C++ | Qt 元对象系统、信号和槽及事件(第一集)

01 元对象系统 一、元对象系统基本概念 1、Qt 的元对象系统提供的功能有:对象间通信的信号和槽机制、运行时类型信息和动态属性系统等。 2、元对象系统是 Qt 对原有的 C++进行的一些扩展,主要是为实现信号和槽机制而引入的, 信号和槽机制是 Qt 的核心特征。 3、要使用元…

三星加强Bixby智能:迈向生成式AI,抗衡谷歌Gemini

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

AI2.0时代如何快速落地AI智能应用开发,抓住时代机会

写在前面的话 当我们提到人工智能时也就是AI的时候呢&#xff0c;我们大多数人首先想到的可能就是像chatGPT这样的聊天机器人&#xff0c;这些聊天机器人通过理解&#xff0c;还有生成自然语言可以给我们提供一些信息&#xff0c;这个是AI最终的形态吗或者AI最终的形式吗&…

【STM32嵌入式系统设计与开发】——16InputCapture(输入捕获应用)

这里写目录标题 STM32资料包&#xff1a; 百度网盘下载链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1mWx9Asaipk-2z9HY17wYXQ?pwd8888 提取码&#xff1a;8888 一、任务描述二、任务实施1、工程文件夹创建2、函数编辑&#xff08;1&#xff09;主函数编辑&#…

代码随想录阅读笔记-二叉树【合并二叉树】

题目 给定两个二叉树&#xff0c;想象当你将它们中的一个覆盖到另一个上时&#xff0c;两个二叉树的一些节点便会重叠。 你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠&#xff0c;那么将他们的值相加作为节点合并后的新值&#xff0c;否则不为 NULL 的节…

vue快速入门(四)v-html

注释很详细&#xff0c;直接上代码 上一篇 新增内容 使用v-html将文本以html的方式显示 源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, …

【web】nginx+php-fpm云导航项目部署-(简版)

一、yum安装nginx yum -y install nginx 二、php环境安装 2.1 php安装 yum -y install php 2.2 php-fpm安装 yum -y install php-fpm 注&#xff1a;PHP在 5.3.3 之后已经讲php-fpm写入php源码核心了。 2.3 项目依赖的php-xml和php-xmlrpc安装 yum -y install php-…

开源模型应用落地-chatglm3-6b模型小试-入门篇(一)

一、前言 刚开始接触AI时&#xff0c;您可能会感到困惑&#xff0c;因为面对众多开源模型的选择&#xff0c;不知道应该选择哪个模型&#xff0c;也不知道如何调用最基本的模型。但是不用担心&#xff0c;我将陪伴您一起逐步入门&#xff0c;解决这些问题。 在信息时代&#xf…

LeetCode 第391场周赛个人题解

目录 哈沙德数 原题链接 思路分析 AC代码 换水问题 II 原题链接 思路分析 AC代码 交替子数组计数 原题链接 思路分析 AC代码 最小化曼哈顿距离 原题链接 思路分析 AC代码 哈沙德数 原题链接 思路分析 签到题&#xff0c;不说了 AC代码 class Solution:def s…

Firefox 关键词高亮插件的简单实现

目录 1、配置 manifest.json 文件 2、编写侧边栏结构 3、查找关键词并高亮的方法 3-1&#xff09; 如果直接使用 innerHTML 进行替换 4、清除关键词高亮 5、页面脚本代码 6、参考 1、配置 manifest.json 文件 {"manifest_version": 2,"name": &quo…