三方库ada

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


约束和说明

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

目标库说明

  • 概述Ada 是符合 WHATWG URL 的解析库,核心 C++ ,并提供 C APIada_c.h)。双许可 Apache-2.0 / MIT
  • 版本选型(重要)
    • 上游 v3.x 要求 C++20 ,并在实现中大量使用 std::ranges::replace / find_if / all_of / any_ofRanges 算法
    • 实测 OHOS NDK 15 自带 libc++ 未完整提供上述 std::ranges::* 符号,导致 v3.4.3 等版本在交叉编译阶段批量报错。
    • 本适配固定为 pkgver=2.9.2C++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
  • buildcmake "$@" ,并追加例如:
    -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.jsonarchive()

与模板一致;name/versionpkgname/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.logada-public-lycium_build.log

7. 产物(典型)

lycium/usr/ada/<ARCH>/lib/libada.soinclude/ada*.hlib/pkgconfig/ada.pclib/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.xC++20 Ranges 用法不兼容,除非全量改写上游或升级 SDK。

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

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

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

相关推荐
坚果派·白晓明2 小时前
三方库 nanomsg
华为·harmonyos
弓.长.5 小时前
ReactNative for OpenHarmony项目鸿蒙化三方库:react-native-pdf — PDF文档查看器
react native·pdf·harmonyos
开开心心就好7 小时前
绿色版PDF多功能工具,支持编辑转换
人工智能·windows·pdf·ocr·excel·语音识别·harmonyos
云和数据.ChenGuang8 小时前
鸿蒙餐饮系统:全场景智慧餐饮新范式
人工智能·机器学习·华为·数据挖掘·harmonyos·鸿蒙·鸿蒙系统
Swift社区8 小时前
AI 驱动 UI:鸿蒙 ArkUI 的新可能
人工智能·ui·harmonyos
KIHU快狐10 小时前
KIHU快狐|国产鸿蒙系统立式一体机RK3588芯片多点触控交互查询终端
华为·交互·harmonyos
●VON10 小时前
半小时从零开发鸿蒙记事本应用:AI辅助开发实战
人工智能·华为·harmonyos
KIHU快狐13 小时前
KIHU快狐|电容触摸壁挂一体机鸿蒙信发系统国产芯片显示终端
华为·harmonyos
弓.长.13 小时前
ReactNative for OpenHarmony项目鸿蒙化三方库:react-native-flip-card — 翻转卡片组件
react native·react.js·harmonyos