loadlocale.c _nl_intern_locale_data 断言错误

loadlocale.c _nl_intern_locale_data 断言错误

在 Debian Jessie 中工作,我启用了 Debian不稳定存储库(与测试相同的问题)。之后安装cmake会报错:

[...]
dpkg: error while cleaning up:
 subprocess rm command for cleanup was killed by signal (Aborted)
dpkg-split: loadlocale.c:129: _nl_intern_locale_data: Assertion `cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' failed.
[...]

之后,使用命令行几乎是不可能的,因为大多数命令(包括 sudo)都会抛出自己的错误:

>$ ls
ls: loadlocale.c:129: _nl_intern_locale_data: Assertion `cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' failed.
Aborted

如何在不关闭机器的情况下恢复此错误?

此外,这是 loadlocale.c 中的错误吗?显然,类似的问题到处都在发生:
https://github.com/junegunn/fzf/issues/356
https://www.reddit.com/r/archlinux/comments/3g9dzf/loadlocalec130_error_on_everything/
https://patchwork.openembedded.org/patch/114739/

答案1

我找到了一个解决方案,非常感谢这些帖子:
https://stackoverflow.com/questions/37121895/yocto-build-loadlocale-c-130
无法设置区域设置的问题;确保 $LC_* 和 $LANG 正确!

然而,我仍然不确定该把这个问题归咎于哪里。

首先,要获得可用的命令行,$LANG需要定义:

>$ LANG=/usr/lib/locale/en_US

(设置LANG=en_US不起作用,路径是必需的!)

之后,命令行应该可以再次使用。以 root 身份编辑locale.gen并取消注释您想要在系统上使用的所有区域设置:

>$ sudo vim /etc/locale.gen

现在locale-gen以 root 身份运行,系统应该已修复。

注意:dpkg-reconfigure locales不起作用,因为它也引发了错误。


为了避免此问题,请cmake在升级之前删除(如果已安装)并使用apt-get upgrade.我无法弄清楚哪个软件包需要专门升级。

我认为升级locales应该足够了,但是这不起作用,因为apt-get upgrade locales(或相关的包)会导致 borken 包错误:

>$ sudo apt-get upgrade locales
[...]
The following packages have unmet dependencies:
 libc-dev-bin : Depends: libc6 (< 2.20) but 2.27-3 is to be installed
                Recommends: manpages-dev but it is not going to be installed
 libc6-dev : Depends: libc6 (= 2.19-18+deb8u10) but 2.27-3 is to be installed
E: Broken packages

尽管我相信相关的软件包是console-data(因为它会很好地询问您在完整升级期间想要使用什么键盘布局),但升级console-data导致升级的软件包与apt-get upgrade升级时的软件包相同。

相关内容