修复 loadlocale.c 中的断言的正确方法是什么?

修复 loadlocale.c 中的断言的正确方法是什么?

我最近将 Ubuntu 更新到了 18.04。此后,发出命令ld不断失败,并出现以下断言:

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

我用 Google 搜索了这个问题,看起来这是一个众所周知的问题。我读过的所有解决方案都建议使用以下命令修复此问题:

export LC_ALL=C

例如,参见这个但是,这样做会破坏我的母语中 VIM 注释的字体。

所以,这个解决方案不适合我-。还有其他方法可以解决这个问题吗?

答案1

一样容易:

export LC_ALL=C

然后运行命令。如果未设置某些内容(例如您的情况中的 LC_TIME),则 LC_ALL 可作为后备

答案2

我在 Ubuntu 14 trusty 上遇到了这个问题,我按如下方式解决了它。

首先,编辑/etc/locale.gen并添加您想要的语言环境。

确保utf8语言环境名称中的是小写的,而不是例如UTF-8

所以我的是:

en_US.utf8
ru_RU.utf8

现在以 root 身份运行:

rm -f /usr/lib/locale/locale-archive
locale-gen --no-archive
locale-gen --no-archive en_US.utf8
locale-gen --no-archive ru_RU.utf8

国旗--no-archive很重要。

现在确保在您的启动文件(如~/.bash_profile等)中将相关变量~/.bashrc设置LANG为小写utf8形式,请参阅目录中的/usr/lib/locale正确形式。

答案3

我将其添加到我的 .bashrc 中,它修复了 Ubuntu 18 和 20 中的问题,当时我使用旧的 32 位 gdb 为 Arm 交叉编译器遇到了同样的消息

导出 LANG=C

相关内容