设置en_US.UTF-8后运行bitbake仍报utf-8 locale错误的原因
报错根本原因
你在~/.bashrc中配置的locale环境变量没有错误,问题核心是系统本地的locale数据库中没有生成可被调用的en_US.UTF-8实体。
Linux系统的locale加载逻辑是:先从本地已固化的可用locale列表中匹配环境变量指定的值,匹配不到就会抛出No such file or directory类错误,这个逻辑链完全对应你遇到的所有异常:
- 新开bash shell时弹出的
setlocale: LC_ALL: cannot change locale警告,就是系统尝试加载你设置的en_US.UTF-8值时找不到对应实体的直接反馈 - 执行
locale命令时反复报找不到LC_*类的默认locale,本质和上面的警告来源一致,不是变量值写错了 - 运行
bitbake时的UTF-8检测失败,是因为bitbake依赖的Python runtime在启动时,同样检测不到有效的UTF-8支持locale,加上Python启动后无法动态修改文件系统级的locale配置,就会直接拦截启动并抛出要求切换UTF-8 locale的报错。
分步解决方式
- 先执行
locale -a查看当前系统已生成的全部可用locale,确认列表中不存在en_US.UTF-8相关条目,这一步是验证问题的关键 - 根据你的系统发行版生成en_US.UTF-8的可用locale实体:
- Debian/Ubuntu系列:编辑
/etc/locale.gen文件,找到en_US.UTF-8 UTF-8条目,删掉行首的注释符号#,保存后执行sudo locale-gen完成生成 - RHEL/CentOS/Fedora/OpenEuler系列:通过包管理器安装官方英文语言包,执行
sudo dnf install glibc-langpack-en,安装完成后系统会自动生成对应en_US.UTF-8的locale实体
- Debian/Ubuntu系列:编辑
- 再次执行
locale -a,确认输出列表中出现en_US.utf8条目,代表locale实体生成成功 - 新开bash终端验证:之前弹出的setlocale警告会完全消失,执行
locale命令不再出现No such file or directory类报错,此时再运行bitbake core-image-base即可正常通过工具的UTF-8 locale检测。
内容的提问来源于stack exchange,提问作者stdcerr
相关产品推荐
相关产品推荐

