1. 程式人生 > >linux系統更新libc ,libstdc++標準庫

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

[[email protected] 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庫版本

[[email protected] 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

檢視新版本情況