三方库ada

欢迎加入 开源鸿蒙跨平台开发者社区,与大家一起共建鸿蒙化 C/C++ 三方库生态。


约束和说明

项目 说明
环境配置参考 仓库内 lycium/doc/ohos_use_sdk/OHOS_SDK-Usage.md、lycium/README.md
OHOS SDK 需 export OHOS_SDK=<SDK 根目录>
目标库上游 ada-url/ada
本仓库选用版本 v2.9.2(见下文「版本选型」)
本仓库适配目录 thirdparty/ada/
目标架构 armeabi-v7a、arm64-v8a、x86_64

目标库说明

  • 概述 :Ada 是符合 WHATWG URL 的解析库,核心 C++ ,并提供 C API (ada_c.h)。双许可 Apache-2.0 / MIT。
  • 版本选型(重要)
    • 上游 v3.x 要求 C++20 ,并在实现中大量使用 std::ranges::replace / find_if / all_of / any_of 等 Ranges 算法。
    • 实测 OHOS NDK 15 自带 libc++ 未完整提供上述 std::ranges::* 符号,导致 v3.4.3 等版本在交叉编译阶段批量报错。
    • 本适配固定为 pkgver=2.9.2 (C++17 ),与上游 发布页 的 2.9.2 一致;待 NDK/libc++ 补齐后再评估升级 3.x。
  • 依赖 :depends=();关闭 ADA_TESTING / ADA_BENCHMARKS / ADA_TOOLS / ADA_USE_SIMDUTF 可避免 CPM 联网拉取 GTest、simdjson、simdutf 等。

适配过程

1. 分析与选型
项 结论
编译方式 CMake
patch ada_ohos_pkg.patch :仅修改 src/CMakeLists.txt ,去掉 -Wfatal-errors
下载 codeload.github.com + v${pkgver} 标签
2. HPKBUILD 元数据(摘录)
bash 复制代码
pkgname=ada
pkgver=2.9.2
source="https://codeload.github.com/ada-url/ada/tar.gz/refs/tags/v${pkgver}"
builddir=ada-${pkgver}
packagename=ada-${pkgver}.tar.gz
buildtools=cmake
3. prepare / build 要点
  • prepare :首次在 ${builddir} 内执行 patch -p1 -i ada_ohos_pkg.patch (配合 .lycium_patched 只打一次),再 cp -rf 到 ${builddir}-${ARCH}-build。
  • build :cmake "$@" ,并追加例如:
    -DCMAKE_SYSTEM_NAME=Linux 、-DBUILD_SHARED_LIBS=ON 、-DADA_TESTING=OFF 、-DADA_BENCHMARKS=OFF 、-DADA_TOOLS=OFF 、-DADA_USE_SIMDUTF=OFF 、-DCMAKE_CXX_FLAGS=-Wno-error=unused-command-line-argument 。
    完整内容以仓库 thirdparty/ada/HPKBUILD 为准。
4. 补丁全文
diff 复制代码
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -30,5 +30,6 @@
   if((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") OR (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang"))
     target_compile_options(ada PRIVATE -Winconsistent-missing-override)
   endif()
-  target_compile_options(ada PRIVATE -Wfatal-errors -Wsign-compare -Wshadow -Wwrite-strings -Wpointer-arith -Winit-self -Wconversion -Wno-sign-conversion)
+  # OHOS/LLVM 交叉编译下 libc++ 等易触发告警,-Wfatal-errors 会导致首条告警即失败
+  target_compile_options(ada PRIVATE -Wsign-compare -Wshadow -Wwrite-strings -Wpointer-arith -Winit-self -Wconversion -Wno-sign-conversion)
 endif(MSVC)
5. hnp.json 与 archive()

与模板一致;name/version 与 pkgname/pkgver 对齐(2.9.2)。

6. 构建
bash 复制代码
export OHOS_SDK=/path/to/ohsdk/linux
cd lycium
./build.sh ada

日志:ada-2.9.2-<ARCH>-lycium_build.log 、ada-public-lycium_build.log。

7. 产物(典型)

lycium/usr/ada/<ARCH>/ 下 lib/libada.so 、include/ada*.h 、lib/pkgconfig/ada.pc 、lib/cmake/ada/。

8. 应用 CMake(C++17)
cmake 复制代码
set(ADA_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/prebuilt/ada/${OHOS_ARCH}")
target_include_directories(entry PRIVATE "${ADA_ROOT}/include")
target_compile_features(entry PRIVATE cxx_std_17)
target_link_libraries(entry PRIVATE "${ADA_ROOT}/lib/libada.so")

FAQ

  1. 为何不用上游最新 3.x?

    见上文「版本选型」:当前 OHOS libc++ 与 v3.x 的 C++20 Ranges 用法不兼容,除非全量改写上游或升级 SDK。

  2. 工具链双重嵌套 Could not find toolchain file

    仅用 cmake "$@" ,勿手写重复的 OHOS_CMAKE_TOOLCHAIN_FILE。

  3. C 源码调用 ada_c.h 链接失败
    libada 仍依赖 C++ 运行时,请用 clang++ 链接或按文档带上 libc++_shared。

相关推荐
Flutter_OH17 小时前
Flutter OHOS 三方库与插件适配相关问题
harmonyos
Flutter_OH18 小时前
Flutter OHOS ohos应用编译相关问题
harmonyos
马剑威(威哥爱编程)21 小时前
【共创稿事节】HarmonyOS 7 Agent 开发实战 01:云端大模型 API 接入底座
华为·harmonyos
万物智能信息科技1 天前
人体感应芯片PIR模块驱动开发—【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】
驱动开发·嵌入式硬件·华为·开源·harmonyos
m0_738185821 天前
Flutter 鸿蒙化实战:sqflite 适配 OpenHarmony,本地 SQLite 数据库
flutter·华为·harmonyos·鸿蒙
马剑威(威哥爱编程)1 天前
【共创稿事节】HarmonyOS 7 Agent 开发实战 02:Agent 工程脚手架与对话 UI 骨架
华为·harmonyos
打工仔折腾 AI1 天前
鸿蒙平板远控电脑实测:ToDesk蓝牙键鼠、双模式鼠标与跨端剪贴板落地记录
人工智能·后端·python·性能优化·计算机外设·电脑·harmonyos
打工仔折腾 AI1 天前
鸿蒙端ToDesk远控电脑实测:蓝牙键鼠、双模式鼠标与跨端剪贴板实践
后端·python·性能优化·计算机外设·电脑·harmonyos·ai agent 实战
OH_TPC1 天前
【鸿蒙优选三方库】@ohos/axios:前端转鸿蒙,网络层几乎不用改
前端·华为·harmonyos·鸿蒙
m0_738185821 天前
Flutter 鸿蒙化实战:simple_circular_progress_bar 适配 OpenHarmony,环形进度条
flutter·华为·harmonyos·鸿蒙