编译Chromium的vaapi_unittest时generate_fontconfig_caches失败如何解决?
问题描述
已按照Chromium官方指南在Ubuntu系统上完成Chromium源码编译,现尝试编译vaapi_unittest单元测试。起初因缺少TTF字体编译失败,在third_party/test_fonts/test_fonts/目录添加大量字体后,又出现如下错误:generate_fontconfig_caches failed with exit code 1
编译日志片段:
$ autoninja vaapi_unittest [25/1011] CXX obj/ui/base/x/x/x11_util.o ... [789/1009] ACTION //third_party/test_fonts/fontconfig:do_generate_fontconfig_caches(//build/toolchain/linux:clang_x64) FAILED: fontconfig_caches/fb5c91b2895aa445d23aebf7f9e2189c-le64.cache-7 python3 ../../build/gn_run_binary.py generate_fontconfig_caches generate_fontconfig_caches failed with exit code 1 [802/1009] CXX obj/media/gpu/chromeos/chromeos/video_decoder_pipeline.o ninja: build stopped: subcommand failed.
需求:解决该错误,或者让vaapi_unittest不依赖字体及其缓存。
解决方案
一、修复fontconfig缓存生成失败问题
1. 清理旧缓存文件
删除已生成的缓存目录,避免残留文件导致冲突:
rm -rf third_party/test_fonts/fontconfig/fontconfig_caches/
执行完成后重新运行autoninja vaapi_unittest,让系统重新生成缓存。
2. 检查字体文件有效性
添加的字体可能存在损坏或格式不兼容的情况,逐个验证:
- 使用
fc-validate命令检查单个字体:fc-validate third_party/test_fonts/test_fonts/[你的字体文件名].ttf - 删除所有验证失败的字体,只保留格式正常的TTF/OTF文件。
3. 手动生成fontconfig缓存
绕过自动生成脚本,手动调用fc-cache生成缓存:
cd third_party/test_fonts/fontconfig/ fc-cache -v -f -s .
生成后将缓存文件重命名为编译报错中指定的文件名(例如fb5c91b2895aa445d23aebf7f9e2189c-le64.cache-7),再重新执行编译。
二、让vaapi_unittest跳过字体依赖
1. 修改GN编译参数
在Chromium源码根目录的out/[你的编译目录]/args.gn中添加以下参数:
use_test_fonts = false
然后重新生成构建文件并编译:
gn gen out/[你的编译目录] autoninja vaapi_unittest
注:该参数会禁用全局测试字体依赖,可能影响其他依赖字体的单元测试,但vaapi_unittest核心功能不依赖字体,通常可正常编译运行。
2. 修改BUILD.gn文件
找到media/gpu/vaapi/vaapi_unittest.cc对应的BUILD.gn配置文件,移除其中依赖//third_party/test_fonts的相关条目,保存后重新执行编译。
内容的提问来源于stack exchange,提问作者Bram
相关产品推荐
相关产品推荐

