You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Yocto中移除无用区域信息以缩小libicudata.so体积?

在Yocto中缩减libicudata.so体积的正确方法

你遇到的问题大概率是filter.json没有被ICU的构建流程正确调用,或者旧的编译缓存没清理导致修改没生效。以下是可落地的解决步骤:


1. 确保bbappend文件的位置和命名正确

  • 把bbappend放在你自定义layer的recipes-support/icu/目录下,命名必须匹配主配方的版本规则,比如用icu_%.bbappend来适配所有ICU版本,避免因版本号变化导致失效。

2. 正确配置filter.json并关联到构建流程

第一步:编写filter.json文件

在bbappend同目录下创建icu/filter.json,内容如下(仅保留英文区域,按需调整):

{
  "localeFilter": {
    "include": ["en", "en_US"],
    "exclude": []
  },
  "collation": false,
  "currency": false,
  "unit": false,
  "timezone": false,
  "transform": false,
  "breakIterator": false
}

第二步:在bbappend中配置调用逻辑

在icu_%.bbappend里添加以下内容,确保filter.json被复制到编译目录,并让ICU构建脚本识别它:

# 让Yocto找到我们添加的filter.json文件
FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"

# 添加filter.json到源码资源
SRC_URI += "file://filter.json"

# 告诉ICU构建时使用这个过滤配置
EXTRA_OECONF += "--with-filter-file=${WORKDIR}/filter.json"

注意:部分旧版本ICU可能使用--enable-filter参数替代--with-filter-file,如果上面的参数不生效,可对应调整。

3. 清理缓存并重新编译ICU

之前的构建缓存会保留旧的编译结果,必须清理后重新构建:

bitbake icu -c cleansstate
bitbake icu

4. 验证优化效果

  • 构建完成后,查看${WORKDIR}/build下的编译日志,搜索"filter"关键词,确认是否有加载filter.json的日志输出。
  • 检查生成的libicudata.so大小,仅保留英文区域的话,体积应该降到2MB以内。

额外优化:进一步缩减体积

如果还需要更小的尺寸,可以在bbappend中添加ICU的小型化配置:

EXTRA_OECONF += " \
    --enable-small \
    --disable-extras \
    --disable-tests \
    --disable-samples \
    --disable-dyload \
"

--enable-small会启用ICU的精简模式,关闭非核心功能,进一步压缩体积。

内容的提问来源于stack exchange,提问作者PhilBot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 19:57:06