c/c++移植适配指导

OpenHarmony 实战开发——C/C++三方库移植适配 众所周知,C/C++三方库相对与JS/ETS的三方组件来说,其运行效率高。那如何将一个C/C++三方库移植到OH系统上呢?本文将介绍如何快速高效的移植一个C/C++三方库到OpenHarmony上。 阅读详情

移植c/c++三方库

如果没有合适的js/ts三方库,此时可以查找是否有成熟的C/C++三方库可以移植到OpenHarmony中,目前可以在这里查看其他开发者已验证可在OpenHarmony上编译通过的C/C++三方库。
通常相对于JS/TS的三方组件来说,C/C++三方库运行效率更高,但首先要能完成在OpenHarmony编译环境下的构建,而且需要再封装NAPI或者使用@ohos/aki对应用提供js接口。接下来将介绍如何快速高效的移植一个C/C++三方库到OpenHarmony上。

C/C++三方库适配问题与解决方案

img

由上图可以了解到,C/C++三方库移植的流程、关键阻塞点和解决方法,接下来我们详细介绍具体的步骤。

第一步:三方库运行时依赖分析

针对运行时依赖的分析,我们开发了对应的c/c++风险识别工具,通过该工具可以扫描出三方库是否有对NDK,OpenGL等接口的依赖,以及是否有bionic的C库接口的依赖等。该工具可以让我们快速的对一个C/C++三方库进行风险识别。

如果依赖无法兼容的接口则该库无法移植,建议更换其他库;如果不依赖以上接口,仍需要继续验证。注意:同时需要分析依赖库的源码。

第二步:三方库编译构建

OpenHarmony的应用编译开发使用的是Deveco Studio,而该工具目前只支持cmake的编译,但开源的C/C++三方库编译方式多样化,包含cmake,configured等方式。对于原生库cmake无法在IDE上编译构建的,我们需要分析问题原因并需要针对IDE修改原生CMakeLists.txt。而非cmake编译方式的三方库,我们也需要分析该库的编译方式进行手写CMakeLists.txt文件将该库编译方式改为cmake编译构建。这些过程比较耗时,尤其对一些大型的C/C++三方库。

针对于这些问题,我们开发一套基于linux下用原生库的编译脚本进行交叉编译三方库的工具lycium。该工具协助开发者,在 linux系统上快速编译构建能在OpenHamony上运行的c/c++ 三方库。

使用lycium工具编译开源库,在lycium工具目录会生成usr目录,里面是三方库头文件及生成的库,该目录下存在已编译完成的32位和64位三方库。需要注意的是:
●有依赖库的必须将依赖库一起编译,否则框架无法进行编译。
●安装目录下对应的三方库有2份,其中armeabi-v7a对应的32位的库,arm64-v8a对应的是64位的库。
接下来就可以对三方库进行测试验证了。

第三步:三方库测试验证

业界内C/C++三方库测试框架多种多样,我们无法将其统一,因此为了保证原生库功能完整,我们基于原生库的测试用例进行测试验证。为此,我们集成了一套可以在OH环境上进行make test等操作的环境:CITools ,通过配置完这套环境,我们就可以在OH环境上运行原生库的测试用例了。

第四步:三方库的使用

验证通过后,就可以使用三方库了。将三方库二进制拷贝到对应的工程\\entry\libs\armxx\目录,头文件拷贝到工程\\entry\src\main\cpp目录下。
可参考curl集成到应用hap,了解三方库的使用:

拷贝动态库到\\entry\libs\${OHOS_ARCH}\目录,动态库需要在\\entry\libs\${OHOS_ARCH}\目录,才能集成到hap包中,所以需要将对应的so文件拷贝到对应CPU架构的目录

img

  • 在IDE的cpp目录下新增thirdparty目录,将编译生成的库拷贝到该目录下,如下图所示

img

  • 在最外层(cpp目录下)CMakeLists.txt中添加将将三方库和三方库的头文件和加入工程中语句。

    target_link_libraries(entry PRIVATE ${CMAKE_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/libcurl.so)                # 将三方库加入工程中
    target_include_directories(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/curl/${OHOS_ARCH}/include)    # 将三方库的头文件加入工程中
    

接下来就可以使用三方库了。

第五步:开发js/ts接口

提供NAPI或者使用@ohos/aki,对应用提供js/ts接口。

第六步:规范源码目录

参考commons-compress三方库的目录,规范源码目录结构,把三方库的源码或二进制引入到cpp目录,在ets目录中引入js api。

/commons-compress               # 三方库源代码
├── src                         # 框架代码
│   └── main
│       └── cpp 
│           ├── zstd            # zstd C源码目录
│           └── zstd.cpp        # zstd Napi封装接口
│       └── ets
│           └── components
│               └── archivers
│                   ├── ar      # ar源代码存放目录
│                   ├── cpio    # cpio源代码存放目录
│                   ├── dump    # dump源代码存放目录
│                   ├── lzma    # lzma源代码存放目录
│                   ├── tar     # tar源代码存放目录
│                   └── zip     # zip源代码存放目录
│               └── compressors
│                   ├── brotli  # brotli源代码存放目录
│                   ├── bzip2   # bzip2源代码存放目录
│                   ├── lz77support  # lz77support源代码存放目录
│                   ├── lzw     # lzw源代码存放目录
│                   ├── snappy  # snappy源代码存放目录
│                   ├── xz      # xz源代码存放目录
│                   └── z       # z源代码存放目录
│               ├── deflate     # deflate源代码存放目录
│               ├── gzip        # gzip源代码存放目录
│               ├── lz4         # lz4源代码存放目录
│               ├── util        # 工具源代码存放目录
│               └── zstd        # zstd源代码存放目录

参考链接

c/c++移植适配指导

鸿蒙OH实战开发:OpenHarmony C/C++三方库移植适配 众所周知,C/C++三方库相对与JS/ETS的三方组件来说,其运行效率高。那如何将一个C/C++三方库移植到OH系统上呢?本文将介绍如何快速高效的移植一个C/C++三方库到OpenHarmony上。 阅读详情

相关推荐

OpenHarmony C/C++三方库移植适配

在开发过程中,经常需要将现有的C/C++三方库移植到OpenHarmony平台上。本文将介绍三方库移植适配的一般流程,包括环境准备、库的集成、编译适配以及调试等步骤,并提供示例代码。在实际开发过程中,开发者经常需要将现有的C/C++三方库移植到OpenHarmony上,以复用已有的代码和功能。三方库的移植适配是OpenHarmony开发中的一个重要环节。通过本文的介绍,开发者可以了解三方库移植的基本流程和方法。在实际操作中,可能需要根据具体的库和OpenHarmony的版本进行适当的调整和优化。

weixin_66608063的博客 914

OpenHarmony C/C++三方库移植适配指南

OpenHarmony 生态中 C/C++ 三方库移植需解决编译兼容性、架构适配、功能验证等核心问题。本指南整合风险识别工具、高效编译框架及多场景适配方案,帮助开发者快速完成三方库移植与验证。

坚果的博客 1230

Pico-W-基于-C-C-SDK-适配-RT-Thread-Wi-Fi-经验总结

Pico W 作为 Raspberry Pi Pico 的衍生版本,主要增加了无线通信的功能,通过搭载 CYW43439 无线芯片,支持 2.4 GHz Wi-Fi 4 及蓝牙5.0 ,其余和 Raspberry Pi Pico 基本相同,外部引脚也相互兼容。也可以参考我之前文章中介绍的使用 Clion 搭建开发调试下载环境,同样适用。

m0_59551305的博客 1106

OpenHarmony C/C++三方库移植适配指导说明

针对开源C/C++三方库编译方式多样化(cmake、configure、make等)及大型库移植耗时的问题,华为开发了Lycium交叉编译工具,支持在Linux环境下利用原生库编译脚本快速构建可在OpenHarmony运行的三方库。工具核心优势:简化交叉编译流程,支持cmake、configure、make等多种构建方式,大幅提升移植效率。Lycium交叉编译工具HPKBUILD模板详情。

坚果的博客 531

从零开始的 AI Infra 学习之路

AI Infra(AI 基础设施)是指为上层的 AI 算法应用提供支持的 AI 全栈底层技术,通过合理利用计算机体系结构,可以实现 AI 计算的加速和部署。AI Infra 主要包括以下内容:AI 训练框架 & 推理引擎;AI 编译 & 计算架构;AI 硬件 & 体系结构。参考资料:;。

AI Infra / LLM / 软件开发 3万+

《科研伦理与学术规范》期末考试答案2023

26单选(2 分)某学术杂志的评稿人同时是某高校相关专业的硕士生导师,在评判一个稿件的时候,他发现该作者研究的题目很有价值, 他便一边压下这个稿子,一边将稿子的纲要传给自己门下的硕士生, 指导他们使用这个题目独立写出一篇论文,并帮助他们发表在其他期 刊上。D.要善待实验动物,是指在饲养管理和使用实验动物过程中,要采取有效措施,使实验动物免遭不必要的伤害、饥渴、不适、惊恐、折磨、疾病和疼痛,保证动物能够实现自然行为,受到良好的管理与照料,为其提供清洁、舒适的生活环境。张某在压力之下不得不屈从。

Glenseeds的博客 4万+

OpenHarmony平台移植 gifsicle:C/C++ 三方库适配实践(Lycium / tpc_c_cplusplus)

本文介绍了如何将gifsicle工具适配到OpenHarmony平台,主要内容包括: 适配流程标准化:通过tpc_c_cplusplus仓库的Lycium框架管理交叉编译,只需提供6个标准文件(HPKBUILD、HPKCHECK等)即可完成适配。 gifsicle特殊处理:由于源码需要先执行bootstrap.sh生成configure脚本,需在prepare()阶段添加这一步骤。 提供完整的HPKBUILD示例:详细说明了如何配置编译参数、处理不同架构以及安装路径隔离。 设备测试方案:通过HPKCHECK

猫哥 的沉淀、积累、总结。天天学习,好好向上...c/c++,嵌入式 linux,Android,HarmonyOS,AIOT) 761

CosyVoice 本地部署详细教程 手把手小白教程

本文提供了详细的CosyVoice本地部署教程,强调了避免中文名称和空格的重要性,并列出了必要的软件安装步骤,包括CUDA、cuDNN、Git和Miniconda。教程涵盖了从检查CUDA版本到下载模型和运行模型的全过程,确保用户能够顺利部署并使用CosyVoice。

huazn612的博客 2万+

嵌入式C/C++可移植性设计:HAL/OSAL分层与跨平台适配实践

在嵌入式系统开发中,可移植性本质是控制软件对硬件和操作系统的耦合程度。其核心原理在于通过分层抽象(如硬件抽象层HAL、操作系统抽象层OSAL)实现平台无关逻辑与平台相关实现的严格解耦。这种设计显著提升代码复用率、降低多平台迁移成本,并支撑从裸机到RTOS再到Linux用户态的渐进式演进。关键技术价值体现在缩短验证周期、规避隐式依赖缺陷(如snprintf行为差异、字节序误用)、保障资源受限环境下的确定性行为。典型应用场景包括工业网关跨架构迁移(ARM→RISC-V)、传感器固件多MCU复用、以及统一代码库支

weixin_33072399的博客 95

有限状态机FSM详解(一)

有限状态机在维基百科中的解释是: 有限状态机(英语:finite-state machine,缩写:FSM)又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。 至于为什么要学FSM,FSM可以把模型的多状态、多状态间的转换条件解耦。可以使维护变得容易,代码也更加具有可读性,也更加艺术。 理解有限状态机首先需要理解整个模型。我们把灯的开关作为示例,...

benjonc的博客 5万+

汇川EASY521 PLC实战指南:从硬件选型到程序架构与故障排查

可编程逻辑控制器(PLC)是工业自动化系统的核心大脑,其工作原理基于循环扫描机制,持续读取输入、执行用户程序并更新输出。这种确定性控制方式,使其在逻辑控制、顺序控制和运动控制中具有不可替代的技术价值,广泛应用于机械设备、生产线和过程控制等场景。对于汇川EASY521这类紧凑型高性能PLC,其核心优势在于集成了运动控制与丰富通讯接口,为中小型设备提供了高性价比的一站式解决方案。在实际应用中,工程师常需处理如“汇川sv660n”伺服驱动器的集成调试,或利用“hslcommunication”等开源库实现C#上位

weixin_42525264的博客 714

突破语音交互边界:基于whisper.cpp的个性化语音模型构建指南

在智能硬件普及的今天,语音交互已成为连接人与设备的核心方式。但传统语音解决方案往往受限于云端依赖、隐私泄露和硬件性能瓶颈。whisper.cpp作为OpenAI Whisper模型的C/C++移植版本,通过纯本地部署、跨平台适配和极致性能优化,正在重新定义离线语音交互的可能性。本文将从场景痛点出发,带你掌握基于whisper.cpp构建个性化语音模型的全流程,包括环境搭建、模型优化、多平台部署及实...

gitblog_01116的博客 510

04目标检测-Two-stage的目标检测算法

前面我们对进行了对比分析,同时上一篇我们介绍了传统算法在目标检测的原理和效果,此篇我们记录了我学习目标检测算法的深度,深入讲述一下深度学习算法在目标检测的原理和效果。原文链接:https://blog.csdn.net/qq_41946216/article/details/132800752。版权声明:本文为CSDN博主「爱吃面的猫」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。One-stage(YOLO和SSD系列):直接回归目标位置。

qq_41946216的博客 3645

【鸿蒙PC三方库移植适配框架解读系列】第一篇:Lycium C/C++ 三方库适配 — 概述与环境配置

摘要: 本文是Lycium适配系列的第一篇,介绍了Lycium框架的核心概念与交叉编译环境搭建。Lycium是OpenHarmony官方提供的C/C++三方库交叉编译框架,采用类似Arch Linux PKGBUILD的设计,通过HPKBUILD文件描述库的元数据和构建流程。文章详细说明了构建机环境要求(Ubuntu/macOS/WSL)和必备工具链,并解析了OpenHarmony SDK的关键组件(交叉编译器、LLVM工具链等)。

白晓明的博客 1466

Cadence IC 618实战:从与非门到环形振荡器的完整版图设计流程(含DRC/LVS避坑点)

本文详细介绍了使用Cadence IC 618进行从与非门到环形振荡器的完整版图设计流程,包括环境准备、基础设计规范、层次化设计、DRC/LVS验证及后仿真优化。特别提供了实战中的避坑技巧和优化建议,帮助工程师高效完成集成电路设计任务。

weixin_26886855的博客 401

2026年03月CCF-GESP编程能力等级认证Scratch图形化编程一级真题解析

本文收录于《,订阅后可阅读专栏内所有文章。

人生就是一个不断学习的过程 231

离线语音识别 | 本地跑通 Whisper.cpp 只需 5 分钟

Whisper.cpp 是 OpenAI Whisper 语音识别模型的 C/C++ 移植版,一个完全无网络的推理引擎:不依赖云端、不收费、音频数据不出本机。三条命令就能跑起本地语音转文字。 ## 为什么要把语音识别放到本地 把音频交给云端 API 有三个实际问题:数据落在第三方服务器,医疗、法务、企业内部等敏感场景无法过隐私这一关;车机、工厂、断网会议这类无网络环境,云端服务直接失效;API

gitblog_00698的博客 330

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Whisper.cpp:重新定义边缘计算的语音识别革命

在人工智能技术飞速发展的今天,语音识别已经从云端服务逐渐向边缘设备迁移。如果你正在寻找一个既高效又隐私安全的语音识别解决方案,Whisper.cpp可能是你技术栈中的完美拼图。这个C/C++实现的OpenAI Whisper模型移植版本,正在悄然改变着离线语音识别的游戏规则。 ## 架构哲学:从云端到边缘的范式转移 传统语音识别服务大多依赖云端计算,这种模式带来了延迟、隐私和成本的三重挑战。W

gitblog_00817的博客 520

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

rea 安装教程:一键装好 rea 命令,再把它接进 AI 智能体

rea 是一个开源逆向分析 CLI 工具:装好后终端里多一条 `rea` 命令,能把应用行为、JavaScript / Electron 应用、原生二进制一次性拍成带证据的结构化结果,再通过 `rea setup` 让 Claude Code、Codex、Cursor 等 AI 智能体直接调用这套分析能力。说白了,它是给程序做体检的自助机——你把程序放进去,它吐出来的不是形容词,而是每一项检查项、

gitblog_00375的博客 389

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

北向应用集成三方库——应用如何调用C/C++三方库

OpenHarmony上的应用一般都是js/ets语言编写的,而js/ets语言是无法直接调用C/C++接口的,所以我们应用如果需要调用C/C++三方库的话,需要在js/ets和C/C++之间建立一个可以互通的桥梁。OpenHarmony系统中提供的napi框架正是这么一座桥梁。根据原生库的测试用例,我们封装2个测试用例接口} J2K_Info;int OpenjpegCompress(const char *input_file, char *output_file) # 图片压缩成J2K格式。

m0_71263309的博客 1553

Whisper.cpp高效部署实战指南:从环境搭建到语音识别全流程

Whisper.cpp是OpenAI Whisper模型的C/C++移植版本,专注于提供高性能自动语音识别(ASR)能力,支持跨平台部署与硬件加速,实现轻量级语音转文本功能。本文将通过零基础环境搭建、极速部署流程、实战案例演示及工具集解析,帮助开发者零门槛掌握这一高效语音识别工具。 ## 核心功能解析 Whisper.cpp作为开源语音识别解决方案,核心优势体现在以下方面: - **跨平台兼

gitblog_00070的博客 1015

本地部署开源语音识别方案:基于Whisper.cpp的高性能语音转文字全指南

在人工智能与语音交互日益普及的今天,如何在保护数据隐私的前提下实现高效准确的语音识别?Whisper.cpp作为OpenAI Whisper模型的C/C++移植版本,为开发者和技术爱好者提供了一套完整的本地部署解决方案。本文将深入探索这一开源项目的技术原理、实战应用与优化策略,帮助你构建属于自己的离线语音转文字系统。 ## 价值主张:为什么选择本地部署的语音识别方案? 在云端API服务盛行的时

gitblog_00582的博客 344

3步实现本地语音转文字:whisper.cpp全场景应用指南

在数字化办公与智能交互日益普及的今天,如何在保护隐私的前提下实现高效语音转文字?作为OpenAI Whisper模型的C/C++移植版本,whisper.cpp以其轻量级架构和全平台支持,为开发者与普通用户提供了离线语音识别的完整解决方案。本文将通过问题导入、技术原理解析、实践方案构建和场景拓展四个阶段,帮助你快速掌握这一工具的核心价值与应用方法。 ## 为什么选择本地语音识别?隐私与效率的双重

gitblog_00526的博客 301

Crystal快速上手:10分钟用grafserv启动一个生产级GraphQL服务器

Crystal 是 Graphile 官方的开源 Monorepo,核心项目 **Grafast** 与 **PostGraphile** 就诞生于此。其中的 **grafserv** 是一个由 Grafast 驱动的高性能 GraphQL 服务器库,能帮你用极少代码在 Node.js 中拉起一个支持 GraphiQL、WebSocket 订阅、错误脱敏的生产级 GraphQL 服务器。本文带你

gitblog_00345的博客 1091

鸿蒙PC开源软件迁移与多语言三方库移植实战课程讲稿(二、C/C++三方库移植实战,以libmediainfo为主线)

摘要: 本课程第二部分聚焦C/C++三方库移植实战,主讲人CSDN猫哥基于鸿蒙PC生态开发经验,系统讲解从环境配置到NAPI封装的完整流程。核心内容包括: 方法论筑基:解析musl与glibc的ABI差异(如pthread_cancel缺失)及三大构建系统(Autotools/CMake/Meson)适配要点; 方案选型:对比手动交叉编译、Lycium++、vcpkg、AI框架四种移植路径; 实战演示:以libmediainfo为例,通过vcpkg解决依赖链与musl兼容性问题; 生态共建:强调贡献补丁与经

猫哥 的沉淀、积累、总结。天天学习,好好向上...c/c++,嵌入式 linux,Android,HarmonyOS,AIOT) 530

鸿蒙第三方库跨平台高级适配:C/C++ Native库移植/NAPI封装/Rust FFI跨语言调用/性能对比优化方案

性能敏感才 Native:先 Benchmark 证明瓶颈,避免盲目桥接。最小桥接面:NAPI 是薄层,逻辑留在 Native,接口越少越好维护。零拷贝优先:ArrayBuffer 直传指针,是跨语言性能的关键。内存是 Native 的生命线:引用计数 + 对称释放,泄漏从源头杜绝。线程模型要清晰:Native 计算 + TaskPool 子线程,主线程永远流畅。

dingchengyu_的博客 219
下一篇: js移植适配指导
OH_TPC
博客等级 码龄1年 1粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值