构建Yocto meta-laird-cp层时msgfmt找不到ITS规则的错误排查
这个错误的核心是msgfmt处理org.freedesktop.NetworkManager.policy.in XML文件时,找不到对应的ITS(XML本地化规则)文件。ITS规则用于指导gettext工具解析XML格式的本地化字符串,缺失该文件会直接导致XML本地化编译失败。
你安装的libappstream-glib-dev和此问题无关,该库主要负责AppStream元数据处理,不提供NetworkManager相关的ITS规则。
检查ITS规则文件是否存在
先确认构建环境中是否有NetworkManager对应的ITS规则文件,通常命名为networkmanager.its或org.freedesktop.NetworkManager.its。该文件一般属于NetworkManager开发包,或由meta层相关recipe引入。
在构建目录中搜索该文件:find ${BUILDDIR} -name "*networkmanager*.its"如果搜不到,说明缺少对应规则文件,需从NetworkManager源码提取或在meta层中添加依赖。
验证msgfmt的ITS规则路径配置
msgfmt会从默认路径或ITS_DIR环境变量指定的路径查找规则文件。检查构建环境的路径配置:echo $ITS_DIR如果为空,手动指定NetworkManager ITS规则所在目录后重新编译:
export ITS_DIR=/path/to/networkmanager/its/files检查recipe的依赖配置
查看summit-networkmanager-lwb的.bb或.bbappend文件,确认是否正确依赖了包含ITS规则的NetworkManager相关包。需在DEPENDS中添加对应依赖:DEPENDS += "networkmanager"同时确认recipe中是否有将ITS规则文件安装到sysroot正确路径的配置。
手动补充ITS规则文件
如果meta层未包含该规则文件,可从NetworkManager官方源码仓库下载networkmanager.its和networkmanager.loc文件,将其添加到summit-networkmanager-lwbrecipe的文件列表,或直接安装到构建系统的${RECIPE_SYSROOT_NATIVE}/usr/share/gettext/its/目录下。
内容的提问来源于stack exchange,提问作者preetam

