loadlocale.c _nl_intern_locale_data 断言错误

Gam*_*aSQ 8 debian upgrade locale

在 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.
[...]
Run Code Online (Sandbox Code Playgroud)

之后,使用命令行几乎是不可能的,因为大多数命令,包括 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
Run Code Online (Sandbox Code Playgroud)

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

此外,这是 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/

Gam*_*aSQ 9

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

但是,我仍然不确定该将问题归咎于何处。

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

>$ LANG=/usr/lib/locale/en_US
Run Code Online (Sandbox Code Playgroud)

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

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

>$ sudo vim /etc/locale.gen
Run Code Online (Sandbox Code Playgroud)

现在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
Run Code Online (Sandbox Code Playgroud)

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