Linux解決libstdc 的版本問題

2021-10-04 01:31:47 字數 3789 閱讀 8181

/usr/lib64/libstdc++.so.6: version `glibcxx_3.4.21' not found。
centos linux release 7.6.1810 (core)

linux centos7 3.10.0-957.5.1.el7.x86_64 #1 smp fri feb 1 14:54:57 utc 2019 x86_64 x86_64 x86_64 gnu/linux

$ strings /usr/lib64/libstdc++.so.6 | grep glibc

glibcxx_3.4

glibcxx_3.4.1

glibcxx_3.4.2

glibcxx_3.4.3

glibcxx_3.4.4

glibcxx_3.4.5

glibcxx_3.4.6

glibcxx_3.4.7

glibcxx_3.4.8

glibcxx_3.4.9

glibcxx_3.4.10

glibcxx_3.4.11

glibcxx_3.4.12

glibcxx_3.4.13

glibcxx_3.4.14

glibcxx_3.4.15

glibcxx_3.4.16

glibcxx_3.4.17

glibcxx_3.4.18

glibcxx_3.4.19

glibc_2.3

glibc_2.2.5

glibc_2.14

glibc_2.17

glibc_2.3.2

# 查詢庫檔案

$ find / -name libstdc++.so.6.0.21

# 如果libstdc++.so.6.0.21庫檔案已存在,則按照下面的步驟建立軟鏈結即可

# 如果libstdc++.so.6.0.21庫檔案不存在,則需要按照下面的步驟編譯新版本的gcc,然後再建立軟鏈結

$ wget

# 解壓檔案

$ tar -xvf gcc-5.2.0.tar.bz2

# 進入解壓目錄

$ cd gcc-5.2.0

$ ./contrib/download_prerequisites

# 建立輸出目錄,用於存放編譯時所有產生的中間檔案

$ mkdir gcc-temp

# 進入輸出目錄

$ cd gcc-temp

# 執行configure配置

$ ../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib

# 編譯gcc,指定編譯使用的執行緒數為8,編譯耗時較長,可能需要幾個小時

$ make -j8

# 這裡為了避免影響系統的穩定性,暫時不執行"make install"和替換系統預設版本的gcc

# 進入輸出目錄

$ cd gcc-temp

# 查詢編譯生成libstdc++.so庫檔案,下面查詢到的libstdc++.so、libstdc++.so.6都只是軟鏈結檔案,libstdc++.so.6.0.21才是真正編譯生成的庫檔案

$ find . -name "libstdc++.so*"

./prev-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so

./prev-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6

./prev-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21

./stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so

./stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6

./stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21

./x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so

./x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6

./x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21

# 拷貝libstdc++.so.6.0.21庫檔案到lib64目錄

$ cp ./x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21 /usr/lib64

# 進入lib64目錄

$ cd /usr/lib64

# 刪除舊的鏈結檔案

$ rm -f libstdc++.so.6

# 建立新的鏈結檔案

$ ln -s libstdc++.so.6.0.21 libstdc++.so.6

# 檢視最終的libstdc++.so庫檔案列表

$ ls -al /usr/lib64/libstdc++.so.6*

lrwxrwxrwx. 1 root root 19 3月 12 10:08 /usr/lib64/libstdc++.so.6 -> libstdc++.so.6.0.21

-rwxr-xr-x. 1 root root 991616 10月 30 14:39 /usr/lib64/libstdc++.so.6.0.19

-rwxr-xr-x. 1 root root 11485880 3月 12 10:01 /usr/lib64/libstdc++.so.6.0.21

如果下面的輸出結果中,出現 glibcxx_3.4.21,則代表新的 libstdc++.so.6.0.21 庫檔案生效。

$ strings /usr/lib64/libstdc++.so.6 | grep glibc

glibcxx_3.4

glibcxx_3.4.1

glibcxx_3.4.2

glibcxx_3.4.3

glibcxx_3.4.4

glibcxx_3.4.5

glibcxx_3.4.6

glibcxx_3.4.7

glibcxx_3.4.8

glibcxx_3.4.9

glibcxx_3.4.10

glibcxx_3.4.11

glibcxx_3.4.12

glibcxx_3.4.13

glibcxx_3.4.14

glibcxx_3.4.15

glibcxx_3.4.16

glibcxx_3.4.17

glibcxx_3.4.18

glibcxx_3.4.19

glibcxx_3.4.20

glibcxx_3.4.21

glibc_2.3

glibc_2.2.5

glibc_2.14

glibc_2.17

glibc_2.3.2

glibcxx_debug_message_length

linux 亂碼解決

1 問題狀況表述,通過跳板機登入了遠端機器時候,部分遠端機器出現亂碼。但是直接登入到遠端機器有時候又沒有亂碼。這是因為本地機器和遠端機器編碼方式不一樣引起的。解決辦法 locale 檢視本地機器 遠端機器編碼方式,檢視是否一致 locale lang en us.utf 8 lc ctype zh ...

Linux中文解決

中文編碼問題 安裝中文語言包 locale a grep zh 檢視是否有中文語言包 local 檢視是否 lc type 為空 在 etc profile.d 下建立 lc type.sh 在 lc type.sh 新增中新增 export lc type zh cn.utf8 pillow py...

linux下解決大量的TIME WAIT

root web02 vi etc sysctl.conf 新增如下內容 net.ipv4.tcp tw reuse 1 net.ipv4.tcp tw recycle 1 net.ipv4.tcp syncookies 1 使核心引數生效 root web02 sysctl p readme ne...