Linux環境下安裝完mongodb,運行./mongod報錯如下
# ./mongod
./mongod: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./mongod)
使用rpm -qa |grep glibc查看系統當前的glibc版本爲2.12
使用如下命令查看系統glibc最高支持的版本爲2.12
# strings /lib64/libc.so.6 |grep GLIBC_
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_PRIVATE
可以配置倉庫用yum升級glibc rpm包(真的,還是用yum吧,省心,靠譜)。
這裏使用源碼包安裝
(1)這裏從http://ftp.acc.umu.se/mirror/gnu.org/gnu/libc/ 下載glibc-2.14.1.tar.gz,解壓得到 glibc-2.14.1,然後創建build目錄
# cd glibc-2.14.1
# mkdir build
(2)運行configure配置,configure --prefix=<glibc-2.14.1 path>
# pwd
/usr/local/mongodb/glibc-2.14/glibc-2.14.1
# cd build/
# ../configure --prefix=/usr/local/mongodb/glibc-2.14/glibc-2.14.1
# ls -l
total 92
drwxr-xr-x. 2 root root 4096 Apr 3 11:30 bits
-rw-r--r--. 1 root root 7773 Apr 3 11:30 config.h
-rw-r--r--. 1 root root 37585 Apr 3 11:30 config.log
-rw-r--r--. 1 root root 3479 Apr 3 11:30 config.make
-rwxr-xr-x. 1 root root 32737 Apr 3 11:30 config.status
-rw-r--r--. 1 root root 568 Apr 3 11:30 Makefile
#
說明:如果在build/的上級目錄執行./configure命令會報錯,原因不知。。
configure: error: you must configure in a separate build directory
看到有的帖子在build/上上級目錄執行也能成功
(3)運行make && make install
# make -j4
# make install
(4)臨時修改環境變量 export LD_LIBRARY_PATH=<glibc-2.14.1 path>/lib:$LD_LIBRARY_PATH
# export LD_LIBRARY_PATH=/usr/local/mongodb/glibc-2.14/glibc-2.14.1/lib:$LD_LIBRARY_PATH
(5)將/lib64/libc.so.6 軟鏈接到 glibc-2.14.1(高能預警!!!不要做這步操作,請跳至步驟7)
# rm -rf /lib64/libc.so.6
# ln -s /usr/local/mongodb/glibc-2.14/glibc-2.14.1/lib/libc-2.14.1.so /lib64/libc.so.6
# ls -l /lib64/libc.so.6
lrwxrwxrwx. 1 root root 61 Apr 3 03:45 /lib64/libc.so.6 -> /usr/local/mongodb/glibc-2.14/glibc-2.14.1/lib/libc-2.14.1.so
再次查看系統glibc最高支持的版本,爲2.14
# strings /lib64/libc.so.6 |grep GLIBC_
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_PRIVATE
但是!但是!但是!
(6)打開新的連接登錄這臺機器失敗,於是想去已有連接改一下密碼,發現passwd不能用,報錯如下
# passwd
passwd: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
想把libc.so.6鏈接回原來的文件,結果ln也不能用
# rm -rf /lib64/libc.so.6
# ln -s /lib64/libc-2.12.so /lib64/libc.so.6
ln: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
很多命令不能用,恢復方法 => 執行
ldconfig -l -v /lib64/libc-2.12.so
(7)再來一遍軟鏈接
cp /usr/local/mongodb/glibc-2.14/glibc-2.14.1/lib/libc-2.14.1.so /lib64/libc-2.14.1.so
rm -rf /lib64/libc.so.6
LD_PRELOAD=/lib64/libc-2.14.1.so ln -s /lib64/libc-2.14.1.so /lib64/libc.so.6
(8)這樣做完之後看着沒什麼問題,但是打開新的連接登錄這臺機器,會打印
-bash: warning: setlocale: LC_CTYPE: cannot change locale (en_US.UTF-8): No such file or directory
-bash: warning: setlocale: LC_COLLATE: cannot change locale (en_US.UTF-8): No such file or directory
-bash: warning: setlocale: LC_MESSAGES: cannot change locale (en_US.UTF-8): No such file or directory
-bash: warning: setlocale: LC_NUMERIC: cannot change locale (en_US.UTF-8): No such file or directory
-bash: warning: setlocale: LC_TIME: cannot change locale (en_US.UTF-8): No such file or directory
執行locale命令,提示如下異常
# 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
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
在/etc/sysconfig/i18n文件中,添加如下行
LC_ALL=C
export LC_ALL
執行 source /etc/sysconfig/i18n
說明:LC_ALL=C 是爲了去除所有本地化的設置,讓命令能正確執行。
打開新的連接登錄這臺機器,看着一切正常,暫時未發現其它異常。
參考資料:
修改libc.so.6導致系統命令都不能用 https://www.jianshu.com/p/ab2dc84a0d15
Linux/Centos下/lib64/libc.so.6: version `GLIBC_2.14' not found問題 https://blog.csdn.net/sole_cc/article/details/51415940
bug寶典linux篇 LC_CTYPE: cannot change locale (en_US.UTF-8): No such file or directory https://blog.csdn.net/warrah/article/details/56008990