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

HarmonyOS 鸿蒙PC平台三方库移植:使用 vcpkg 移植 libzen(ZenLib)

网罗开发小红书、快手、视频号同名大家好我是展菲目前在上市企业从事人工智能项目研发管理工作平时热衷于分享各种编程领域的软硬技能知识以及前沿技术包括iOS、前端、Harmony OS、Java、Python等方向。在移动端开发、鸿蒙开发、物联网、嵌入式、云原生、开源等领域有深厚造诣。图书作者《ESP32-C3 物联网工程开发实战》图书作者《SwiftUI 入门进阶与实战》超级个体COC上海社区主理人特约讲师大学讲师谷歌亚马逊分享嘉宾科技博主华为HDE/HDG我的博客内容涵盖广泛主要分享技术教程、Bug解决方案、开发工具使用、前沿科技资讯、产品评测与使用体验。我特别关注云服务产品评测、AI 产品对比、开发板性能测试以及技术报告同时也会提供产品优缺点分析、横向对比并分享技术沙龙与行业大会的参会体验。我的目标是为读者提供有深度、有实用价值的技术洞察与分析。展菲您的前沿技术领航员 大家好我是展菲 全网搜索“展菲”即可纵览我在各大平台的知识足迹。每周定时推送干货满满的技术长文从新兴框架的剖析到运维实战的复盘助您技术进阶之路畅通无阻。文章目录前言背景与动机库简介ZenLibvcpkg 包名libzenlibmediainfo前置条件环境变量与工具链Triplet第一部分移植 libzenZenLib1.1 在 OHOS 上容易踩坑的原因1.2 典型报错pthread_cancel 未声明1.3 vcpkg 侧解决方案补丁文件提升 port-version1.4 关键文件摘录1.5 安装命令与产物位置第二部分移植 libmediainfo排障清单结语附录社区与交流本文说明如何在鸿蒙 PCHarmonyOS / OpenHarmonyOHOS 工具链上使用vcpkg构建ZenLiblibzen并在此基础上安装依赖它的libmediainfo。重点记录musl / OHOS 环境下pthread_cancel不可用的典型报错与port 补丁做法便于在团队内复现与升级版本做为使用vcpkg 鸿蒙化三方库的迁移使用指导。前言背景与动机鸿蒙 PC 侧原生应用或媒体类工具常需要成熟的 C/C 三方库。手动管理源码、补丁和交叉编译参数成本高而vcpkg作为微软开源的 C/C 包管理器通过port构建配方统一处理下载、打补丁、CMake 配置与安装并与scripts/buildsystems/vcpkg.cmake深度集成适合作为 OHOS 三方库的「单一入口」。社区已有面向 OHOS 的 vcpkg 衍生仓库与文档本文建立在以下资源之上vcpkg 鸿蒙仓https://gitcode.com/OpenHarmonyPCDeveloper/ohos_vcpkgvcpkg 在鸿蒙上的入门《使用 vcpkg 为鸿蒙HarmonyOS / OHOS下载与安装三方库实践指南》库简介ZenLibvcpkg 包名libzenZenLib是MediaArea维护的C 跨平台基础库字符串、线程、工具类等广泛用于同一生态内的其它组件。在 vcpkg 中端口名为libzen当前文基于版本0.4.41、port-version调整见后文。libmediainfolibmediainfo用于读取音视频及多媒体文件的元数据封装格式、编码、时长等底层依赖 ZenLib 等组件。完成libzen在 OHOS 上的编译与安装后libmediainfo的依赖链在 vcpkg 侧通常已打通安装命令简洁文末给出简要步骤与参考仓库。前置条件环境变量与工具链exportOHOS_SDK_ROOT/path/to/ohos-sdk/linux确认 Clang 可用ls$OHOS_SDK_ROOT/native/llvm/bin/clangTriplet下文以arm64-ohos为例名称需与本仓triplets实际一致。第一部分移植 libzenZenLib1.1 在 OHOS 上容易踩坑的原因移植难点往往不在于依赖数量而在于工具链与 sysroot与--target…-ohos对齐libc 行为差异OHOS 侧常见musl取向部分在 glibc 上习以为常的接口不存在或未实现。其中pthread_cancel是最常见的卡点之一。1.2 典型报错pthread_cancel未声明编译Source/ZenLib/Thread.cpp时可能出现error: use of undeclared identifier pthread_cancel根因简述pthread_cancel并非 POSIX 必选接口在musl等实现中通常不可用OHOS 编译参数里也常见-D__MUSL__。ZenLib 原先策略是Android不走pthread_cancel其它 Unix 走该路径OHOS/musl 更接近应采用与 Android 同类策略而不是传统 glibc Linux。1.3 vcpkg 侧解决方案补丁文件仓库中提供ports/libzen/ohos-musl-no-pthread-cancel.patch并在ports/libzen/portfile.cmake的vcpkg_from_github里通过PATCHES自动应用。思路在__ANDROID_API__、__OHOS__、__MUSL__任一成立时不调用pthread_cancel并用(void)ThreadPointer;消除未使用变量告警。提升port-version为避免二进制缓存或旧构建树认为 port「未变化」在ports/libzen/vcpkg.json中已增加例如port-version:1具体数值以仓库为准。1.4 关键文件摘录补丁核心 diff示意diff --git a/Source/ZenLib/Thread.cpp b/Source/ZenLib/Thread.cpp --- a/Source/ZenLib/Thread.cpp b/Source/ZenLib/Thread.cpp -519,11 519,15 Thread::returnvalue Thread::ForceTerminate() { //Terminating (not clean) - #if !defined(__ANDROID_API__) // pthread_cancel is not available on some libc implementations (e.g. musl, // OpenHarmony). Android already excludes it; extend the same policy. #if !defined(__ANDROID_API__) !defined(__OHOS__) !defined(__MUSL__) pthread_cancel((pthread_t)ThreadPointer); #else (void)ThreadPointer; #endif //Configuring StateState_Terminated;portfile.cmake结构与补丁引用if(VCPKG_TARGET_IS_WINDOWS) vcpkg_check_linkage(ONLY_STATIC_LIBRARY) endif() vcpkg_from_github( OUT_SOURCE_PATH SOURCE_PATH REPO MediaArea/ZenLib REF v${VERSION} SHA512 4232eb6e73e9b380f6fe2ce3cfeb9fe343936362a35ca8d088c783dc6277332df762d689efe023e3f1418c2e6d2629e0b82ac93df9cce3ae0ab346c2ed1911f1 HEAD_REF master PATCHES ohos-musl-no-pthread-cancel.patch ) vcpkg_find_acquire_program(PKGCONFIG) vcpkg_cmake_configure( SOURCE_PATH ${SOURCE_PATH}/Project/CMake OPTIONS -DPKG_CONFIG_EXECUTABLE${PKGCONFIG} -DCMAKE_REQUIRE_FIND_PACKAGE_PkgConfig1 ) vcpkg_cmake_install() vcpkg_cmake_config_fixup(PACKAGE_NAME zenlib) vcpkg_fixup_pkgconfig() if(NOT VCPKG_BUILD_TYPE AND VCPKG_TARGET_IS_WINDOWS) vcpkg_replace_string(${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/libzen.pc -lzen -lzend) endif() file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include ${CURRENT_PACKAGES_DIR}/debug/share) vcpkg_install_copyright(FILE_LIST ${SOURCE_PATH}/License.txt)vcpkg.json示例{name:libzen,version:0.4.41,port-version:1,description:ZenLib is a C utility library for easiest cross-platform development,homepage:https://github.com/MediaArea/ZenLib,license:Zlib,dependencies:[{name:vcpkg-cmake,host:true},{name:vcpkg-cmake-config,host:true}]}1.5 安装命令与产物位置修改 port 后建议清理 libzen 构建树避免补丁未重新应用rm-rf/path/to/vcpkg/buildtrees/libzenvcpkginstalllibzen:arm64-ohos安装成功后典型产物路径installed/arm64-ohos/lib/库文件具体静态/动态由 triplet 决定installed/arm64-ohos/include/installed/arm64-ohos/share/zenlib/CMake 包配置以实际生成为准编译成功效果示意第二部分移植 libmediainfo在libzen已正确安装的前提下libmediainfo在依赖解析上通常不再卡在 ZenLib 层按本仓库 port 状态执行安装即可例如vcpkginstalllibmediainfo:arm64-ohos若 port 名称或 feature 与上游变动以ohos_vcpkg仓库内ports/libmediainfo为准。安装成功效果示意相关仓库参考vcpkg 鸿蒙仓https://gitcode.com/OpenHarmonyPCDeveloper/ohos_vcpkg排障清单补丁是否生效删除buildtrees/libzen后重新vcpkg install libzen:arm64-ohos。交叉编译参数编译命令中应出现--target…-ohos与--sysroot…/native/sysroot。OHOS_SDK_ROOT路径正确避免出现多余/或缺失目录。其它 libc 差异若仍有报错按报错逐个比对是否为 glibc-only API再考虑补丁或替换实现。结语将libzen移植到 HarmonyOS / OHOS本质是交叉编译 libc 能力对齐。pthread_cancel看似「标准 pthread」在 musl/OHOS 下却不成立通过vcpkg port 补丁把平台差异收敛在包管理侧业务 CMake 可保持简洁并便于版本升级与团队复用。附录社区与交流开源鸿蒙开发者社区鸿蒙 PChttps://harmonypc.csdn.net/

相关文章:

HarmonyOS 鸿蒙PC平台三方库移植:使用 vcpkg 移植 libzen(ZenLib)

网罗开发(小红书、快手、视频号同名)大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等方…...

Agent大战,赢家暗自在哪下功夫?

(一)日子都不好过OpenAI和Anthropic在release note节奏上,证明了一件事:他们有实力两周抬一次模型能力线。其威力,足以消灭掉一批创业公司。这事不展开,共识。在这一波里,别说小公司&#xff0c…...

Keil C166嵌入式开发中的宽字符实现与优化

1. 宽字符支持问题解析在嵌入式C语言开发中,Unicode支持是一个常见需求。最近我在使用Keil C166开发工具时遇到了一个关于宽字符(wchar_t)定义的有趣问题。打开标准库头文件stdlib.h时,发现其中对wchar_t的定义如下:#ifndef _WCHAR_T_DEFINED…...

原来训大模型,就像开一家小餐馆!

你是不是一直觉得,训练大语言模型是 OpenAI、百度这种大厂才能干的事?要几万张显卡,要花几个亿,普通人想都不敢想? 错了!我用自己开发机上的 8 张 H20 显卡,花了点时间,从零开始训了…...

Windows电脑自带软件全部无法使用?亲测有效的解决办法!

Windows电脑自带软件全部无法使用?亲测有效的解决办法! 最近在使用电脑的时候,我突然遇到了一个非常离谱的问题: Windows 系统自带的软件几乎全部无法正常打开! 包括但不限于: 计算器相机录音机截屏工具画图…...

Meta裁了8000人,员工拖着行李箱抢可乐

昨天凌晨4点,Meta很多员工的邮箱同时响了。是裁员邮件。这一次,Meta裁掉了全球约10%的员工,规模大约8000人。分手大礼包:16周基础薪资 每满1年工龄额外2周薪资 18个月全家医保。真正让硅谷炸锅的,反而是裁员前几天&a…...

Python、BMA-Stacking融合LightGBM、GBDT、KNN多模型电商交易欺诈风险预警研究|附代码数据

全文链接:https://tecdat.cn/?p45916原文出处:拓端数据部落公众号封面:关于分析师在此对 Haoyang Ke 对本文所作的贡献表示诚挚感谢。他在浙江财经大学完成了数理统计专业的学习,专注机器学习、数据采集领域。他擅长 Python、R 语…...

AI赋能 绿色未来 —— 华硕重磅亮相第二十八届海峡两岸经贸交易会

当AI浪潮席卷全球,绿色低碳成为时代共识,一场汇聚两岸智慧、共探产业新机的盛会如约而至。5月21日第二十八届海峡两岸经贸交易会于福州海峡会展中心盛大启幕。这场由国务院台办、福建省人民政府联合主办的国家级盛会,深耕两岸经贸交流多年&am…...

WxJava 微信开发包 - 新手入门指南

WxJava 微信开发包 - 新手入门指南项目概览项目名称Binary Wang/WxJavaStarsGVP ⭐⭐⭐⭐⭐组织Binary Wang语言Java标签GVP, Java, 微信开发, 微信公众号, 微信支付项目简介WxJava 是一个基于 Java 的微信开发工具包,支持微信公众号、微信支付、小程序、企业微信等…...

鸿蒙今日穿搭页面构建:单品清单、一周搭配日历与穿搭提示模块详解

鸿蒙今日穿搭页面构建:单品清单、一周搭配日历与穿搭提示模块详解 前言 在 HarmonyOS 6.0 应用开发中,穿搭类页面的单品管理、周计划安排和温馨提醒是完善用户体验的重要补充模块。本文将以“今日穿搭”应用中的“单品清单”网格模块、“一周搭配日历”周…...

鸿蒙今日穿搭页面构建:衣橱库存、今日配色与场景建议模块详解

鸿蒙今日穿搭页面构建:衣橱库存、今日配色与场景建议模块详解 前言 在 HarmonyOS 6.0 应用开发中,穿搭类页面的衣橱管理、配色方案和场景化建议是提升用户实用性的关键功能模块。本文将以“今日穿搭”应用中的“衣橱库存”进度条模块、“今日配色”色彩盘…...

关于自指系统与算术障碍的跨领域猜想:一项探索性研究(世毫九实验室学术完善报告)

关于自指系统与算术障碍的跨领域猜想:一项探索性研究(世毫九实验室学术完善报告) 作者:方见华 单位:世毫九实验室 核心摘要 本报告针对世毫九实验室原创的探索性跨领域论文《关于自指系统与算术障碍的跨领域猜想&#…...

鸿蒙今日穿搭页面构建:搭配推荐与风格筛选模块详解

鸿蒙今日穿搭页面构建:搭配推荐与风格筛选模块详解 前言 在 HarmonyOS 6.0 应用开发中,穿搭类页面的核心挑战在于如何展示搭配灵感、风格筛选和衣橱管理。本文将以“今日穿搭”应用的主页面为例,深入解析如何在鸿蒙平台上构建时尚穿搭类应用的…...

【咨询业AI Agent应用成熟度评估模型】:基于217家机构实测数据的4级能力图谱与升级路线图

更多请点击: https://codechina.net 第一章:【咨询业AI Agent应用成熟度评估模型】:基于217家机构实测数据的4级能力图谱与升级路线图 本模型基于对全球217家管理咨询、战略咨询与数字化转型服务商的实地调研与系统性能力测评,覆…...

观察Taotoken按Token计费模式如何帮助项目控制预算

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 观察Taotoken按Token计费模式如何帮助项目控制预算 对于依赖大模型API进行开发的团队和个人而言,成本控制是一个贯穿项…...

C++虚函数与多态机制

C虚函数与多态机制虚函数是C实现运行时多态的核心机制。通过虚函数表和虚函数指针,C能够在运行时根据对象的实际类型调用相应的函数实现。虚函数的基本语法使用virtual关键字声明,派生类可以重写基类的虚函数。#include #include #includeclass Animal {…...

【AI入门知识点】Harness 是什么?为什么 DeepSeek 要组建 Harness 团队?

最近,DeepSeek 招聘信息中出现了一个越来越高频的关键词——Harness 团队。 很多人第一反应是: Harness 是什么?一种新模型?还是某个框架?为什么 DeepSeek 专门成立团队来做这个?如果你第一次听到这个词&am…...

【AI入门知识点】告别繁琐配置!Claude Code + DeepSeek 直连方案打造最强 VSCode 编程助手

在 AI 编程领域,Claude Code 凭借其强大的 Agent 能力(自动读写文件、执行命令)一直是开发者的梦中情“器”。然而,官方 API 的高昂费用和网络限制,让许多国内开发者望而却步。 这篇文章我们不通过 cc-switch 转发请求…...

pycryptodome导入失败的四大底层原因与诊断方案

1. 这不是pycryptodome的问题,而是你没看清它真正依赖的底层逻辑“ImportError: No module named Crypto”、“AttributeError: module Crypto.Cipher has no attribute AES”、“ModuleNotFoundError: No module named Cryptography_cffi...”——这些报错我过去三…...

Python爬虫实战:爬取论文期刊 文献整理+管理表生成

写论文的时候最烦什么?不是写内容,是找文献和整理文献。相信每个研究生都有过这样的经历:打开十几个浏览器标签页,一篇一篇复制论文标题、作者、期刊、发表时间、摘要,然后粘贴到Excel里,一不小心还会复制错…...

通过curl命令直接测试Taotoken聊天补全接口的配置与调用方法

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过curl命令直接测试Taotoken聊天补全接口的配置与调用方法 在开发或调试大模型应用时,有时你可能希望绕过高级SDK&am…...

AI代理运行时基础设施:从上下文溢出到持久化事件日志

1. 这不是新赛道,是 runtime 层的“操作系统时刻”来了你有没有在深夜调试一个跑了三小时的 AI 代理,突然发现它开始胡言乱语?不是模型崩了,不是 prompt 写错了,而是——它的“记忆”被挤掉了。上下文窗口就那么大&…...

AI绘画中的诡异谷:从技术缺陷到可控美学的跃迁

1. 项目概述:当AI画笔开始颤抖——我们为什么该认真对待“诡异谷”里的美你有没有盯着一张AI生成的肖像画,越看越不对劲?眼睛太亮、皮肤太滑、手指多了一节,或者笑容弧度精准得像用圆规画出来的——那种说不上来哪里怪&#xff0c…...

2026出纳岗位新人如何快速提升能力:从基础上手到能力跃升的最快路径

2026年,出纳岗位已经不再只是“收付款、跑银行、登记现金日记账”这么简单。随着企业财务数字化、业财一体化和AI工具普及,新人想快速成长,必须同时具备规范意识、系统操作能力、数据思维和风险意识。这也是为什么越来越多财务新人会关注像CD…...

Mythos架构解析:大模型的可编程推理能力与Gated Release机制

1. 项目概述:一次被刻意“锁住”的能力跃迁如果你最近关注大模型前沿动态,大概率在技术社区、AI从业者群或邮件列表里见过“TAI #200”这个编号——它不是某篇论文的DOI,也不是某个开源项目的Release Tag,而是The AI Alignment Ne…...

SSH安全加固:禁用弱加密算法的实操指南

1. 为什么禁用弱加密算法不是“可选项”,而是SSH上线前的必过门槛我第一次在客户现场接手一台刚部署的CentOS 7跳板机时,安全扫描报告里赫然标红了三条:ssh-rsa签名算法被标记为CRITICAL,diffie-hellman-group1-sha1密钥交换被判定…...

Claude Mythos:AI驱动的自动化漏洞挖掘与攻防范式跃迁

1. 项目概述:一场静默却震耳欲聋的AI能力跃迁这周,整个AI安全圈没有爆炸性新闻稿,没有铺天盖地的发布会直播,只有一份措辞克制、数据密集的系统卡片(System Card)和一份由英国AI安全研究所(AISI…...

Python自动化登录:破解验证码与Cookie会话维持实战

1. 这不是“绕过验证”,而是理解会话机制的起点很多人看到“跳过验证码登陆”第一反应是:这合规吗?会不会被封?其实这个问题本身就暴露了一个关键误区——我们不是在“绕过”什么,而是在还原真实用户登录时浏览器自动完…...

工业AI落地:从数据冷启动到高质数据工程实战

1. 为什么“数据为中心”不是口号,而是工程现场的真实压力去年冬天,我帮一家做工业缺陷检测的初创公司做模型交付。他们拿来的数据集只有237张标注图,全是产线停机时人工拍的——光照不均、角度单一、连螺丝孔都只拍正面。当时团队信心满满&a…...

DeepSeek总结的从 DuckDB 迁移到 chDB基准测试

来源: https://github.com/chdb-io/cookbook/tree/main/migration-from-duckdbBENCHMARK.md 迁移基准测试 —— 深度探讨 本文是从 DuckDB 迁移到 chDB指南的配套文档。指南的第 5 节将环境/场景/结果/摘要内联呈现;本文件则包含不适合指南风格流程的部分&#xf…...