如何解決類似 /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found 的報錯
阿新 • • 發佈:2019-01-30
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