通过开源鸿蒙终端工具Termony完成gettext 命令行工具构建过程深度解读
本文记录了在aarch64架构下使用命令OHOS_ARCH=aarch64 OHOS_ABI=arm64-v8a sh ./create-hnp.sh构建gettext的全过程。详细描述了构建环境配置、工具链设置、关键构建日志以及产物验证步骤。构建过程中解决了HTTPS下载失败等问题,最终生成了包含gettext系列工具、库文件和资源文件的HNP包。文章还提供了重建与清理的操作指南,并针对构建稳定
·
本文记录在 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_ARCH和OHOS_ABI - 负责环境变量导出与调用顶层 Make
- 检查必需的环境变量
-
📦 顶层 Makefile:
build-hnp/Makefile- 将
gettext纳入PKGS变量

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

- 自动合并
external-hnp目录下的外部 HNP 包 - 最终拷贝到
entry/hnp/$(OHOS_ABI)
- 将
⚙️ 包配置与工具链
- 📁 包 Makefile:
build-hnp/gettext/MakefileSOURCE_URL = $(GNU_MIRROR)/gnu/gettext/gettext-0.25.tar.xzCONFIG_ARGS = --prefix=$(PREFIX) --enable-static --enable-shared --host $(OHOS_ARCH)-unknown-linux-musl
- 🔧 通用构建宏与工具链:
build-hnp/utils/Makefrag- 交叉工具链:指向
$(OHOS_SDK_HOME)/native/llvm/bin的clang/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/编码相关的功能检测通过
- 构建
libtextstyle、libintl、libgettext{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)"gettext、gettext.sh、gettextizexgettextmsgfmt、msgmerge、msgunfmt、msgcat、msgcmp、msgcomm、msgconv、msgenmsgexec、msgfilter、msggrep、msginit、msguniq

-
📚 库与资源:
ls -la build-hnp/sysroot/lib | grep -E "(libintl|libtextstyle|libgettext)" ls -la build-hnp/sysroot/share/gettextsysroot/lib下安装的相关.so/.a库(如libintl、libtextstyle、libgettext*)

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

-
📦 HNP 包:
ls -la entry/hnp/arm64-v8a/*.hnpentry/hnp/arm64-v8a/base.hnp与base-public.hnp
🐛 常见问题与处理
- ❌ HTTPS 下载失败:
- 现象:
Unable to establish SSL connection导致归档下载为空 - 处理:删除坏文件后重试;构建系统已实现
wget→curl兜底逻辑和多镜像回退
- 现象:
- ⚠️ 目录结构与
configure:- 需确保
SOURCE_DIR与归档内顶层目录一致(本例为gettext-0.25),并在temp/<SOURCE_DIR>/build目录调用上一级../configure
- 需确保
- 🔗 依赖与功能:
- 若启用更多前端工具或语言绑定(Java/C# 等),需确保宿主机工具(
javac、xmllint等)可用;当前默认环境已满足基础需求
- 若启用更多前端工具或语言绑定(Java/C# 等),需确保宿主机工具(
🔄 重建与清理
-
🔧 重建单包:
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机制自动检测包列表变化,无需手动清理
更多推荐


所有评论(0)