本文记录在 aarch64 目标下使用命令 OHOS_ARCH=aarch64 OHOS_ABI=arm64-v8a sh ./create-hnp.sh 构建 gettext 的完整过程,涵盖环境、构建链路、关键日志、产物验证与问题修复,便于后续复现与维护。

🚀 构建入口与顶层组织

  • 📝 执行命令OHOS_ARCH=aarch64 OHOS_ABI=arm64-v8a sh ./create-hnp.sh

  • 🔧 入口脚本create-hnp.sh

    • 检查必需的环境变量 OHOS_ARCHOHOS_ABI
    • 负责环境变量导出与调用顶层 Make
  • 📦 顶层 Makefilebuild-hnp/Makefile

    • gettext 纳入 PKGS 变量

    image-20251121102820183

    • 通过 check-pkgs 机制自动检测 PKGS 变化并触发重新构建
    • base.hnp 依赖所有包的 .stamp 和外部 HNP 包

    image-20251121102908297

    • 自动合并 external-hnp 目录下的外部 HNP 包
    • 最终拷贝到 entry/hnp/$(OHOS_ABI)

⚙️ 包配置与工具链

  • 📁 包 Makefilebuild-hnp/gettext/Makefile
    • SOURCE_URL = $(GNU_MIRROR)/gnu/gettext/gettext-0.25.tar.xz
    • CONFIG_ARGS = --prefix=$(PREFIX) --enable-static --enable-shared --host $(OHOS_ARCH)-unknown-linux-musl
  • 🔧 通用构建宏与工具链build-hnp/utils/Makefrag
    • 交叉工具链:指向 $(OHOS_SDK_HOME)/native/llvm/binclang/llvm-ar/llvm-ranlib/...
    • PKG_CONFIG_LIBDIR:指向 ../sysroot.pc 路径,保障依赖探测
    • 下载规则:为应对 HTTPS 问题,使用"wget→curl"兜底的下载命令,支持多镜像回退

📋 关键执行与日志

  • 📥 下载问题与修复
    • 初次通过 ftp.gnu.org 下载发生 SSL 建立失败
    • 随后清理空归档并以 wget || curl 兜底重新下载,成功获取大小约 9.5MB 的 gettext-0.25.tar.xz
    • 构建系统已实现自动多镜像回退机制
  • ⚙️ 配置与编译(节选)
    • 多数标准库接口与多线程、Locale/编码相关的功能检测通过
    • 构建 libtextstylelibintllibgettext{lib,src,po} 等核心库,生成并安装 Gettext 系列工具
  • 📦 安装与打包
    • 安装路径:build/data/app/base.org/base_1.0/...,随后复制到 ../sysroot 并进行 ELF strip
    • 合并外部 HNP 包(如果存在)
    • 打包阶段执行 zip -r base.hnp sysroot 并拷贝到 entry/hnp/arm64-v8a/

✅ 产物验证

  • 🔧 可执行工具

    ls -la build-hnp/sysroot/bin/ | grep -E "(gettext|xgettext|msg)"
    
    • gettextgettext.shgettextize
    • xgettext
    • msgfmtmsgmergemsgunfmtmsgcatmsgcmpmsgcommmsgconvmsgen
    • msgexecmsgfiltermsggrepmsginitmsguniq

    image-20251121103056783

  • 📚 库与资源

    ls -la build-hnp/sysroot/lib | grep -E "(libintl|libtextstyle|libgettext)"
    ls -la build-hnp/sysroot/share/gettext
    
    • sysroot/lib 下安装的相关 .so/.a 库(如 libintllibtextstylelibgettext*

    image-20251121103143061

    • sysroot/share/gettext 下包含样例、m4 脚本、JAR 资源、项目模板等

    image-20251121103214993

  • 📦 HNP 包

    ls -la entry/hnp/arm64-v8a/*.hnp
    
    • entry/hnp/arm64-v8a/base.hnpbase-public.hnp

🐛 常见问题与处理

  • ❌ HTTPS 下载失败
    • 现象Unable to establish SSL connection 导致归档下载为空
    • 处理:删除坏文件后重试;构建系统已实现 wgetcurl 兜底逻辑和多镜像回退
  • ⚠️ 目录结构与 configure
    • 需确保 SOURCE_DIR 与归档内顶层目录一致(本例为 gettext-0.25),并在 temp/<SOURCE_DIR>/build 目录调用上一级 ../configure
  • 🔗 依赖与功能
    • 若启用更多前端工具或语言绑定(Java/C# 等),需确保宿主机工具(javacxmllint 等)可用;当前默认环境已满足基础需求

🔄 重建与清理

  • 🔧 重建单包

    make -C build-hnp rebuild-gettext
    
  • 🧹 清理

    make -C build-hnp clean  # 清理 sysroot、所有 .stamp 和 PKGS_MARKER
    
  • 🔄 自动重建机制

    • 修改 PKGS 后,check-pkgs 会自动检测变化并触发重新构建
    • 新增外部 HNP 包到 external-hnp 目录后,会自动合并到 base.hnp

📝 结论与建议

  • ✅ 已完成 aarch64 目标下 gettext 的交叉编译与打包,工具链与库均安装到 sysroot 并进入 HNP 包。
  • 💡 建议
    • 固定可靠镜像与兜底下载,保障源获取稳定性(已实现自动回退机制)
    • 根据实际需要选择性安装工具组件,减少空间占用
    • 使用构建缓存与分阶段并行策略,加速整体构建流程
    • 利用 check-pkgs 机制自动检测包列表变化,无需手动清理
Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐