1. 程式人生 > >如何解決類似 /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found 的報錯

如何解決類似 /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found 的報錯

1 問題描述

編譯程式或執行程式時,出現類似/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21’ not found的報錯。

2 問題分析

這是因為升級gcc時,生成的動態庫沒有替換老版本gcc的動態庫,將gcc最新版本的動態庫替換掉老版本的動態庫即可。

3 解決步驟

  • 檢視GLBCXX版本
>> strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX

GLIBCXX_3.4
GLIBCXX_3.4.1
...
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_FORCE_NEW GLIBCXX_DEBUG_MESSAGE_LENGTH

可以看到,最高版本為3.4.13,沒有對應的3.4.21

  • 檢視libstdc++.so.6連結的庫
>> ll /usr/lib64/libstdc++.so.6
/usr/lib64/libstdc++.so.6 -> libstdc++.so.6.0.13 #這是libstdc++.so.6現在連結的庫
  • 檢視系統更高版本的lib庫
>> find / -name libstdc++.so.6*
/usr/lib64/libstdc++.so.6.bak
/usr/lib64/libstdc++.so.6.0
.13 /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.0.20 /usr/local/lib64/libstdc++.so.6 /usr/local/lib64/libstdc++.so.6.0.20-gdb.py /usr/local/lib64/libstdc++.so.6.0.20 #這裡有一個6.0.20版本,比libstdc++.so.6.0.13版本更高
  • 檢視lib庫的資訊
>> strings /usr/local/lib64/libstdc++.so.6.0.20 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
... GLIBCXX_3.4.19 GLIBCXX_3.4.20 #這個版本滿足我們的需求 GLIBCXX_FORCE_NEW GLIBCXX_DEBUG_MESSAGE_LENGTH
  • 重新連結
>> cp /usr/local/lib64/libstdc++.so.6.0.20 /usr/lib64/libstdc++.so.6.0.20
>> rm -f /usr/lib64/libstdc++.so.6
>> ln -s /usr/lib64/libstdc++.so.6.0.20 /usr/lib64/libstdc++.so.6