背景
由于软件开发用了c++17,centos版本为7.2;需要升级glibc(libc.so,libstdc++.so),由于很多依赖该核心库,升级导致系统崩溃多次。记录如下。
错误如下:
java.lang.UnsatisfiedLinkError: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /data/app/gwtomcat-gateway-18113/webapps/old-driver-core/WEB-INF/classes/linux-x86-64/libehr_v2.so)
java.lang.UnsatisfiedLinkError: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /data/app/gwtomcat-gateway-18113/webapps/old-driver-core/WEB-INF/classes/linux-x86-64/libehr_v2.so)
a
查看glibc版本
ll /lib64/libc.so.6
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
strings /usr/lib64/libstdc++.so.6 | grep CXXABI
失败后可利用下面命令恢复:
ldconfig -lv /lib64/libc-2.17.so
可能报错:
ls: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /lib64/librt.so.1)
ls: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /lib64/libpthread.so.0)
编译法升级
编译glibc 2.33**
查看glibc系统版本库,可以使用命令:
strings /lib64/libc.so.6 |grep GLIBC_
接下来下载glibc 2.33并升级:
下载源码包
wget http://ftp.gnu.org/gnu/glibc/glibc-2.33.tar.gz
解压
tar -xvf glibc-2.33.tar.gz
进入源码目录
cd glibc-2.33
创建编译目录并进入
mkdir build && cd build
编译glibc
../configure --prefix=/usr/local/glibc-2.33
make && make install
修改软连接
建立新的软连接
ln -s /usr/local/glibc-2.14/lib/libc-2.14.so /lib64/libc.so.6
如果系统命令不可用,执行:
LD_PRELOAD=/usr/local/glibc-2.14/lib/libc-2.14.so ln -s /usr/local/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
解决升级后中文显示乱码的问题
cp /usr/lib/locale/locale-archive /usr/local/glibc-2.14/lib/locale/locale-archive
解决时区不正确的问题
ln -sf /etc/localtime /usr/local/glibc-2.14/etc/localtime</pre>
最后
glibc是系统底层的依赖库,升级前请做好相关备份操作,升级有风险
网友评论