1. 程式人生 > 實用技巧 >CentOS 升級libc後導致中文亂碼 locale: Cannot set LC_CTYPE to default locale: No such file or directory

CentOS 升級libc後導致中文亂碼 locale: Cannot set LC_CTYPE to default locale: No such file or directory

CentOS 升級libc後導致中文亂碼

CentOS 6.5 預設libc最高版本支援為GLIBC_2.12
檢視方法:

strings /lib64/libc.so.6 |grep GLIBC_ 

由於一些軟體編譯需要高版本的libc,不想升級系統版本,只好單獨升級libc版本(儘量不要在線上機器直接升級,除非你很有信心一次就可以編譯並且升級成功)

具體升級方法在網上可以找到很多,這裡推薦一個:
升級方法

升級完成後檢視帶中文檔案的目錄 ls 會發現中文字全部變成 ???
執行 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_COLLATE to default locale: No such file or directory

如果這時你沒有刪除glibc的編譯目錄,則進入glibc的編譯目錄,也就是build目錄

make localedata/install-locales

再次執行 locale 這時應該已經正常了

但是如果你已經刪除了編譯glibc的build目錄或者不知道build的目錄在哪裡
按照以下步驟:

  • 檢視 libc.so.6 軟連線指向

ls -la /lib64/libc.so.6

/lib64/libc.so.6 -> libc-2.14.so
  • 檢視 locale-archive 歸檔檔案目錄

strings libc-2.14.so | grep locale-archive

 /usr/local/glibc-2.14/lib/locale/locale-archive

這個目錄是在升級libc的時候build的目錄

  • 新增軟連結

ls -la /usr/local/glibc-2.14/lib/locale/locale-archive
發現檔案並不存在

那麼

ln -s /usr/lib/locale/locale-archive /usr/local/glibc-2.14/lib/locale/locale-archive

重新執行 locale 已經正常了 !