GLIBC_2.xx not found(GLIBC升级)

系统默认一般是2.12.我在centos上运行chromedriver的时候报了glibc_2.14和2.16没找到,所以要升级.下面是参考文档:

场景需求

默认的Centos6.5 glibc版本最高为2.12, 而在进行Nodejs开发时项目所依赖的包往往需要更高版本的glibc库支持, 因此在不升级系统的前提下, 需要主动更新系统glibc库. 一般遇到错误libc.so.6: version GLIBC_2.14 not found时表示需要对glibc进行升级了.

glibc版本

查看系统glibc库版本可使用如下命令:

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

Centos6.5输出如下glibc版本列表, 从此图可以看出系统最高支持glibc的2.12版本: glibc-2.12 另外, 执行$ ll /lib64/libc**可以看到此时的libc.so.6是libc-2.12.so的别名, 如下图所示: glibc-2.12-ll

glibc安装

首先, 点击此处下载glibc点击下载, 得到glibc-2.14.tar.gz使用如下命令解压glibc-2.14.tar.gz:

$ tar -xzvf glibc-2.14.tar.gz

当前目录下得到目录glibc-2.14, 执行$cd glibc-2.14命令进入目录, 依次执行如下命令编译安装glibc-2.14:

$ 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库

glibc软链

安装完成后, 建立软链指向glibc-2.14, 执行如下命令:

$ rm -rf /lib64/libc.so.6 			// 先删除先前的libc.so.6软链
$ ln -s /opt/glibc-2.14/lib/libc-2.14.so /lib64/libc.so.6

注意

删除libc.so.6之后可能导致系统命令不可用的情况, 可使用如下方法解决:

$ LD_PRELOAD=/opt/glibc-2.14/lib/libc-2.14.so  ln -s /opt/glibc-2.14/lib/libc-2.14.so /lib64/libc.so.6

如果上述更新失败可使用如下命令还原:

$ LD_PRELOAD=/lib64/libc-2.12.so ln -s /lib64/libc-2.12.so /lib64/libc.so.6    // libc-2.12.so 此项是系统升级前的版本

感谢丁文翔 <[email protected]>指出本文遗漏事项!

此时查看系统glibc版本如下图所示: glibc

这里要注意,当我执行rm -rf /lib64/libc.so.6后,所有系统命令会失效,而且会报如下错。这里参考资源里原作者也给到了:
whoami: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
who: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
logger: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory

所以这里敲黑板,一般用软链接直接过去没用,用以下方法:

$ LD_PRELOAD=/opt/glibc-2.14/lib/libc-2.14.so  ln -s /opt/glibc-2.14/lib/libc-2.14.so /lib64/libc.so.6
如果上述更新失败可使用如下命令还原:

$ LD_PRELOAD=/lib64/libc-2.12.so ln -s /lib64/libc-2.12.so /lib64/libc.so.6    // libc-2.12.so 此项是系统升级前的版本
因为是服务器,笔者确实也吓倒了。然后其实我应该直接装2.16:
LD_PRELOAD=/opt/glibc-2.16/lib/libc-2.16.so  ln -s /opt/glibc-2.16/lib/libc-2.16.so /lib64/libc.so.6
有次笔记运行这个命令失败,进去找发现没有libc-2.16.so,所以重新编译的。
http://ftp.gnu.org/gnu/glibc/glibc-ports-2.16.0.tar.gz

下面是两篇参考链接:
https://www.cnblogs.com/fyc119/p/6954742.html
https://cnodejs.org/topic/56dc21f1502596633dc2c3dc
发布了64 篇原创文章 · 获赞 26 · 访问量 36万+

猜你喜欢

转载自blog.csdn.net/moliyiran/article/details/104134625