CentOS6.5安装glibc-2.14后locale出现No such file or directory解决办法

目录
  •  一、掉进坑里
  • 二、挣扎无果
  • 三、青春的冲动
  • 四、柳暗花明
  • 五、问题KO
  • 六、后记

 一、掉进坑里

最近公司内部的一台测试服务器(CentOS6.5),因为安装某软件需要升级glibc库,glibc是linux的一个核心库,如果直接替换升级原有版本,可能出现无法预料的异常(比如大面积出现命令不能运行)。
于是手动升级安装了glibc-2.14,参考分享Centos6.5升级glibc过程
去官网下了个glibc-2.14的tar包,按照上面的步骤编译安装:

$ mkdir build  // 在glibc-2.14目录下建立build文件夹
$ cd build     // 进入build目录
$ ../configure --prefix=/opt/glibc-2.14 // 注意:配置glibc并设置当前glibc-2.14安装目录
$ make && make install     // 编译安装glibc-2.14库

修改了/lib64/libc.so.6的软连接指向,程序可以正常运行,但中文出现了乱码问题

于是呼,按照自己的经验和网上大多数N人的说法,认为这个简单,重新设置一下语言不就搞定了吗?

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

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

_注:以上错误不仅出现在手动运行locale命令时,而且每次ssh远程登录进shell时都会出现。_

二、挣扎无果

为解决以上问题,大量度娘和G狗,尝试过以下方法,问题依旧。

使用如下命令:
export LANG="en_US.utf8"
可以修改环境变量LANG,修改之后立即生效,当时当系统重新启动时便会又变成原来的语言
另外两种修改语言的方法:
1.配置如下文件:
vi /etc/sysconfig/i18n
将原来的配置如:
LANG="zh_CN.utf8"
修改为
LANG="en_US.utf8"
保存之后不会立即生效,而是要重启之后生效。

三、青春的冲动

焦头烂额之时,出去smoking了一下,看来还是要回到问题的本质,既然出现了 No such file or directory错误,说明应该是我们配置了某种不存在或者系统不支持的locale,比如上面解决办法中的通过个修改语言LANG=”en_US.UTF-8”,将locale设置成了zh_CN.UTF-8,而操作系统在通过配置去初始化本地化环境的时候,没有找到相应的语言包(其实不只是语言包,locale还包括时区、货币度量等), 即OS找不到对应的locale文件,想明白这个问题就好办了。

先使用locale命令看看系统中有没有这个locale

[****@****** bin]# locale -a|grep en_US
en_US
en_US.iso88591
en_US.iso885915
en_US.utf8

一看傻眼了,里面有en_US.utf8,也就是说OS是支持将locale配置成en_US.utf8的,那为什么还是出现如下错误:

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

四、柳暗花明

是不是忽略了什么,再次回到原点审视。突然,想到了一个问题:我们重新安装了一个新的glibc库,而不是覆盖升级,也就是说系统中目前至少有两个locale命令,CentOS如何知道用哪个?

会不会是用了我们新装的/opt/glibc-2.14/bin/locale,而不是系统默认的/usr/bin/locale,用下面的命令很容易验证这个想法:

[****@****** bin]# /opt/glibc-2.14/bin/locale -a
C
POSIX

果然,这个locale只支持C和POSIX,而没有en_US.utf8,所以如果我们将locale配置成en_US.utf8,自然会报No such file or directory错误。

问题又来了,/opt/glibc-2.14/bin/locale命令所列举的本地化locale语言包,是从哪里来的?是通过配置文件?还是直接读取某个目录里面的文件?
当然如果去看源代码很容易找到上面问题的答案,因为俺比较懒,便大胆猜测:应该是从某个目录里面读取的,这个目录里面应该有系统所支持的所有的locale文件。这样猜测是源于错误消息是“没有这样的文件或目录”。

为了找到这个目录的位置,想到了strings命令,直接使用如下命令:

[****@****** bin]# strings /opt/glibc-2.14/bin/locale|grep locale
setlocale
/locale.
locale (GNU %s) %s
/opt/glibc-2.14/lib/locale
/opt/glibc-2.14/share/locale
all-locales
/opt/glibc-2.14/lib/locale/locale-archive
locale: %-15.15s archive: /opt/glibc-2.14/lib/locale/locale-archive
locale: %-15.15s directory: %.*s
Cannot set LC_CTYPE to default locale
Cannot set LC_MESSAGES to default locale
Cannot set LC_COLLATE to default locale
Cannot set LC_ALL to default locale
Write names of available locales
Get locale-specific information.

果然上面出现了一个路径/opt/glibc-2.14/lib/locale/locale-archive,通过名字很容易猜出这个很可能就是locale命令去读取所有被支持的locale目录(/或归档文件)位置。

五、问题KO

ls一下上面那个目录,的确里面是空的,没有locale-archive这个归档文件。

[****@****** bin]# ll /opt/glibc-2.14/lib/locale/

现在解决办法就很简单了,直接将/usr/bin/locale这个locale命令使用的locale-archive文件copy到/opt/glibc-2.14/lib/locale/locale-archive即可

[****@****** bin]# cp /usr/lib/locale/locale-archive /opt/glibc-2.14/lib/locale/locale-archive

可能有小伙伴会问了,你怎么知道/usr/bin/locale使用的locale文件目录是/usr/lib/locale/locale-archive,答案很简单:度娘一把,很容易查到。

copy完成后,exit会话,重新登录进来,再运行/opt/glibc-2.14/bin/locale命令,未出现No such file or directory错误了,而且之前的乱码问题也解决了。

六、后记

上面记录一次了笔者自己解决centos 6.5环境下手动安装glibc库后出现的乱码问题,过程中涉及到一些关于locale的原理知识,也顺便了解了一下。
By the way,上面猜测的/opt/glibc-2.14/bin/locale命令locale读取路径,后来也的确看一下locale.c源码,证实的确是从/opt/glibc-2.14/lib/locale/locale-archive读取的(当然还有其他的读取位置)。

到此这篇关于CentOS6.5安装glibc-2.14后locale出现No such file or directory解决办法的文章就介绍到这了,更多相关安装glibc出现中文乱码解决办法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • CentOS6升级glibc操作步骤

    目录 背景 编译glibc 2.14 修改软连接 最后 背景 测试环境有一台CentOS 6系统,需要搭建安卓编译环境,但是发现安卓SDK要求glibc最低版本为2.14,CentOS 6默认是2.12的版本,记录下glibc升级过程.升级前请将服务器备份,生产环境不建议操作. 编译glibc 2.14 查看glibc系统版本库,可以使用命令: strings /lib64/libc.so.6 |grep GLIBC_ 接下来下载glibc 2.14并升级: #下载源码包 wget http:/

  • Centos7升级glibc导致系统异常(无法开机)解决方法

    目录 出现问题原因: 解决思路: 解决办法: 我使用的是centos7(理论上这个方法仅仅对centos7以及Redhat7都可以使用该方法解决问题) 注意:此方法仅针对Redhat7/Centos7以上. 出现问题原因: 在调优hbase的时候,查资料发现可以升级hadoop本地库来对hbase进行优化处理.在进行对hadoop本地库升级时,发现hadoop本地库依赖的glibc和系统依赖的glibc不一致,于是对glibc进行升级.经过查询相应资料升级完成后,发现服务器异常(无法开机). 解

  • centos 6.9 升级glibc动态库的详细过程

    glibc是gnu发布的libc库,即c运行库,glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc.glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现.很多linux的基本命令,比如ls,mv,cp, rm, ll,ln等,都得依赖于它,如果操作错误或者升级失败会导致系统命令不能使用,严重的造成系统退出后无法重新进入,所以操作时候需要慎重,升级之前保存好重要资料. 写这篇笔记的目的其实是我在centos 下想要安装

  • Centos6.5升级glibc过程介绍

    目录 场景需求 glibc版本 glibc安装 glibc软链 场景需求 默认的Centos6.5 glibc版本最高为2.12, 而在进行Nodejs开发时项目所依赖的包往往需要更高版本的glibc库支持, 因此在不升级系统的前提下, 需要主动更新系统glibc库. 一般遇到错误libc.so.6: version GLIBC_2.14 not found时表示需要对glibc进行升级了. glibc版本 查看系统glibc库版本可使用如下命令: $ strings /lib64/libc.s

  • CentOS6.5安装glibc-2.14后locale出现No such file or directory解决办法

    目录  一.掉进坑里 二.挣扎无果 三.青春的冲动 四.柳暗花明 五.问题KO 六.后记  一.掉进坑里 最近公司内部的一台测试服务器(CentOS6.5),因为安装某软件需要升级glibc库,glibc是linux的一个核心库,如果直接替换升级原有版本,可能出现无法预料的异常(比如大面积出现命令不能运行). 于是手动升级安装了glibc-2.14,参考分享Centos6.5升级glibc过程 去官网下了个glibc-2.14的tar包,按照上面的步骤编译安装: $ mkdir build //

  • CentOS6.5安装glibc-2.14后locale出现No such file or directory解决办法

    目录  一.掉进坑里 二.挣扎无果 三.青春的冲动 四.柳暗花明 五.问题KO 六.后记  一.掉进坑里 最近公司内部的一台测试服务器(CentOS6.5),因为安装某软件需要升级glibc库,glibc是linux的一个核心库,如果直接替换升级原有版本,可能出现无法预料的异常(比如大面积出现命令不能运行). 于是手动升级安装了glibc-2.14,参考分享Centos6.5升级glibc过程 去官网下了个glibc-2.14的tar包,按照上面的步骤编译安装: $ mkdir build //

  • mac 安装omyzsh后不执行~/.bash_profile、~/.bashrc的完美解决办法

    mac 安装 omyzsh 后, terminal瞬间逼格飙升! 但是! terminal init的时候并不会执行~/.bash_profile.~/.bashrc等脚本了, 这是因为其默认启动执行脚本变为了-/.zshrc. 解决办法就是修改-/.zshrc文件,在其中添加: source -/.bash_profile.-/.bashrc等脚本文件就ok了 以上所述是小编给大家介绍的mac 安装omyzsh后不执行~/.bash_profile.~/.bashrc的完美解决办法,希望对大家

  • 安装Oracle时出现环境变量Path的值大于1023的解决办法

    出现的情况我就不说了,直接重点: 计算机->属性->高级系统设置->高级->环境变量 1)在"系统变量"编辑Path,全选将其中的路径全部复制出来放到文本文档中: 2)新建一个系统变量取名Path1 ,剪切Path中的所有变量放入Path1然后保存: 3)并将Path中全选删除改为默认值:%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;: 4)最后在Path中建立一个引用,也就是引用Pa

  • iOS应用进入后台后计时器和位置更新停止问题的解决办法

    由于iOS系统为"伪后台"运行模式,当按下HOME键时,如程序不做任何操作,应用会有5秒的执行缓冲时间,随机程序被挂起,所有任务终端,包括计时器和位置更新等操作,但程序打开后台模式开关后,部分任务可以再后台执行,如音频,定位,蓝牙,下载,VOIP,即便如此,程序的后台运行最多可以延长594秒(大概是10分钟).不幸的是,程序在声明后台模式后很有可能在app上架时被拒.基于此,我研究出了不用申明后台模式就能让计时器和定位在app进入前台时继续运行的方法.   实现原理如下: 利用iOS的

  • 解决PHP 7编译安装错误:cannot stat ‘phar.phar’: No such file or directory

    前言 最近因为工作需要要使用PHP 7,所以从网上找教程进行安装, 结果编译没问题, 安装的时候报了错误. 错误如下 cp -pR -f phar.phar /usr/local/php7/bin/phar cp: cannot stat 'phar.phar': No such file or directory make: *** [install-pharcmd] Error 1 解决方法很简单: find . -name 'phar.phar' 找到 phar.phar 文件, 移动或者

  • IIS服务器中 ASP.NET State Service 开启后 Session 仍容易丢失的问题终极解决办法

    解决方法一: 1. 开启ASP.NET State Service服务: 选择管理工具->服务,找到ASP.NET State Service,点开后选择启动,并将启动类型设为自动. 2. 设置程序配置文件: 将web.config打开,会看到有一行是<sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" timeout="20"/>,如

  • WIN2008系统安装IIS7配过ASP后打开ASP网站为500错误的解决办法

    访问ASP网站时总是提示:"500 - 内部服务器错误.您要查找的资源有问题,无法显示." 上面显示的是IIS的友好报错,按下面的步骤把详细错误显示出来! 1.在IIS管理器→ASP里,把错误信息发送到浏览器这个选项开启(True),并注意在IE设置里去掉"显示友好的错误":2.然后在"错误页"设置选项里,双击500那一行,再点文件按路径后面的"设置".在跳出的对话框中将"相对文件路径"里的文件名改为&qu

  • mac os gem安装json出现error failed的解决办法

    升级到最新的mac os Mavericks.装json出现错误: 复制代码 代码如下: gem install json -v '1.8.1' Building native extensions.  This could take a while... ERROR:  Error installing json:   ERROR: Failed to build gem native extension. /usr/local/var/rbenv/versions/2.0.0-p247/bi

随机推荐