Linux CentOS 6.5升级GLIBC2.14及操作系统中文乱码解决方法

阅读 54

2023-09-14

最近开发提交的项目需要用到glibc库,检查操作系统看到默认安装的glibc-2.12版本。项目要求最低版本为gblic-2.14,先准备下载glibc-2.14。

下载地址:http://ftp.gnu.org/gnu/glibc/。

1、查看Linux上GLIBC版本。

localhost ~]# strings /lib64/libc.so.6 |grep GLIBC

2、下载并解压glibc-2.14.tar.gz

下载:wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz

解压:tar -zxvf glibc-2.14.tar.gz -C ./glibc

3、编译并安装glibc-2.14

先进入glibc-2.14目录,创建build文件夹,

cd glibc-2.14/

cd build/

../configure --prefix=/usr/local/glibc-2.14

编译并安装

make

make install

安装完成后,查看build目录下编译出新的libc.so版本

localhost ~]# strings /glibc/glibc-2.14/build/libc.so|grep GLIBC

Linux CentOS 6.5升级GLIBC2.14及操作系统中文乱码解决方法_Linux

已经安装成功,以下步骤尤为关键。我在这一步直接删除/lib64/libc.so.6后,操作系统无法正常操作,重启无法进入系统。通过挂载系统盘,进入排错模式,将libc.so.6复制到挂载点恢复操作系统启动。

4、建立软连接,完成GLIBC升级。

localhost ~]# cp /glibc/glibc-2.14/build/libc.so /lib64/libc-2.14.so

删除系统旧链接

localhost ~]# rm -rf /lib64/libc.so.6

建立新的软链接

localhost ~]# LD_PRELOAD=/lib64/libc-2.14.so ln -s /lib64/libc-2.14.so /lib64/libc.so.6

localhost ~]# strings /lib64/libc.so.6 |grep GLIBC

至此,glibc-2.14完成升级。但是操作系统中中文全部显示为问号,下来我们恢复中文显示。

Linux CentOS 6.5升级GLIBC2.14及操作系统中文乱码解决方法_GLIBC升级_02

查看系统字符集,输入echo $LANG,系统字符集正确。

问题排查

localhost ~]# strace localedef

在Shell中运行locale,出现如下错误:

locale: Cannot set LC_CTYPE to default locale: No such file or directory

locale: Cannot set LC_MESSAGES to default locale: No such file or directory

locale: Cannot set LC_ALL to default locale: No such file or directory

Linux CentOS 6.5升级GLIBC2.14及操作系统中文乱码解决方法_GLIBC升级_03

5、恢复升级glibc-2.14带来的中文显示乱码问题。

查看glibc-2.14的字符集

localhost ~]# strings /usr/local/glibc-2.14/bin/locale -a|grep locale

由于glibc-2.14的/usr/local/glibc-2.14/lib/目录下没有locale文件夹,我自己创建在拷贝文件。

localhost ~]# mkdir /usr/local/glibc-2.14/lib/locale/

localhost ~]# cp /usr/lib/locale/locale-archive /usr/local/glibc-2.14/lib/locale/locale-archive

重启,查看中文是否已经能够显示了。这是我的操作系统修改方式,仅做参考。

6、时间调整

升级glibc-2.14不仅中文显示乱码,系统时间也被初始化,需要将系统时区修改为所在地时区。

查看localtime是否存在。

localhost ~]# ll /usr/local/glibc-2.14/etc/

删除localtime

localhost ~]# rm -rf /usr/local/glibc-2.14/etc/localtime

将时区进行软连接

localhost ~]# ln -s /usr/local/glibc-2.14/share/zoneinfo/Asia/Shanghai /usr/local/glibc-2.14/etc/localtime

在Shell中输入date,查看系统时间是否已经修改正确。

Linux CentOS 6.5升级GLIBC2.14及操作系统中文乱码解决方法_GLIBC升级_04


精彩评论(0)

0 0 举报