linux系统更新libc ,libstdc++标准库

开发环境下正常运行的c++程序放到新的环境重新make后报:

/lib64/libc.so.6: version `GLIBC_2.18' not found (required by /lib64/libstdc++.so.6)

/lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /lib64/libstdc++.so.6)

查看新环境的GLIBC版本:

srings /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_2.15
GLIBC_2.16
GLIBC_2.17
GLIBC_PRIVATE

strings /lib64/libstdc++.so.6 | grep CXXABI

[root@bigdata-server3 lib64]# strings libstdc++.so.6 | grep CXXABI
CXXABI_1.3
CXXABI_1.3.1
CXXABI_1.3.2
CXXABI_1.3.3
CXXABI_1.3.4
CXXABI_1.3.5
CXXABI_1.3.6
CXXABI_1.3.7

发现确实版本不够

需要分别升级c和c++库

查看本地库的实际地址:

ll /usr/lib64/libstdc++.so.6
lrwxrwxrwx 1 root root 19 Nov 16 09:27 /usr/lib64/libstdc++.so.6 -> libstdc++.so.6.0.19

ll /usr/lib64/libc.so.6
lrwxrwxrwx 1 root root 12 Nov 16 09:16 /usr/lib64/libc.so.6 -> libc-2.17.so

==========================================================

升级libc

# wget http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz

(17版本以后不需要port依赖库)

下载完成后,解压,并进入解压后的目录

# tar -xvf glibc-2.18.tar.gz 

# cd glibc-2.18

# mkdir build

# cd build/ 

../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin(时间比较长)

make

make之后 得到新的库,以后指向新的库的软连接libc.so.6

# strings libc.so.6 |grep GLIBC | head -30
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_2.15
GLIBC_2.16
GLIBC_2.17
GLIBC_2.18
GLIBC_PRIVATE

]# ll | grep libc
-rw-r--r-- 1 root root 22246960 Nov 16 09:58 libc.a
-rw-r--r-- 1 root root 192 Nov 16 09:52 libc-abis.h
-rw-r--r-- 1 root root 0 Nov 16 09:52 libc-abis.stamp
-rw-r--r-- 1 root root 93 Nov 16 09:52 libcidn.map
-rw-r--r-- 1 root root 33865 Nov 16 09:52 libc.map
-rw-r--r-- 1 root root 72910 Nov 16 09:58 libc_nonshared.a
-rw-r--r-- 1 root root 25446348 Nov 16 09:58 libc_pic.a
-rw-r--r-- 1 root root 21951016 Nov 16 09:58 libc_pic.os
-rw-r--r-- 1 root root 109 Nov 16 09:52 libcrypt.map
-rwxr-xr-x 1 root root 10230960 Nov 16 09:58 libc.so
lrwxrwxrwx 1 root root 7 Nov 16 09:58 libc.so.6 -> libc.so

此时切记不要直接复制此文件夹内的文件到系统/usr/lib64去替换原始库文件(如果已删除,删除系统libc.so.6,会导致系统命令不可用, 请使用LD_PRELOAD相关命令恢复)

继续make install 

正好完成后 ,新编译的库会生成到系统目录下

/usr/lib64/ | grep libc
-rwxr-xr-x. 1 root root 2173512 Apr 10 2018 libc-2.17.so
-rwxr-xr-x 1 root root 10230960 Nov 16 10:08 libc-2.18.so

lrwxrwxrwx 1 root root 12 Nov 16 10:08 libc.so.6 -> libc-2.18.so

再次查看系统c库版本

[root@bigdata-server3 lib64]# strings 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_2.15
GLIBC_2.16
GLIBC_2.17
GLIBC_2.18
GLIBC_PRIVATE

c库升级完成

====================================================

升级c++库

查看本地库的实际地址:

#ll /usr/lib64/libstdc++.so.6
lrwxrwxrwx 1 root root 19 Nov 16 09:27 /usr/lib64/libstdc++.so.6 -> libstdc++.so.6.0.19

拷贝高版本标准库libstdc++.so.6.0.21到该目录(可网上下载

重新设置软连接

#ln -snf   /usr/lib64/libstdc++.so.6.0.21 /usr/lib64/libstdc++.so.6

查看新版本情况

原文地址:https://www.cnblogs.com/apache11/p/9967658.html