/lib64/libstdc++.so.6: version `GLIBCXX_3.4.26' not found

原因

使用的gcc沒有找到對應的glib庫。

每個版本的glib都會有改變,所以使用的時候必須匹配。

大部分是因爲自己編譯升級了gcc,再用新的gcc編譯程序時沒有找到當時匹配的類庫。

查找原因

報錯提示很明確了,/lib64/libstdc++.so.6中沒有找到GLIBCXX_3.4.26版本內容。正常情況/lib64/libstdc++.so.6並不是具體文件,而是軟連接,可以通過ls -la查看,大部分連接到當前目錄下的類庫,比如libstdc++.so.6.0.24

也可以通過如下命令查看該類庫下支持到哪個版本

strings /usr/lib64/libstdc++.so.6|grep GLIBCXX
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
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_DEBUG_MESSAGE_LENGTH

可以看到是3.4.24,最後的編號24與lib庫libstdc++.so.6.0.24最後的編號是一致的。

解決方法

既然lib庫與glib版本是有規律的,所以理論上我們應該在系統中查找libstdc++.so.6.0.26文件(或者比26更高的類庫),大部分都應該能找到,如果沒找到,要麼到網上下一個,要麼自己再編譯一遍gcc。

編譯安裝的類庫,除非特殊指明,大部分都在/usr/local/lib64/目錄下,但是編譯查找的目錄大部分是/usr/lib64/。所以要麼指定加載路徑爲/usr/local/lib64/;要麼把類庫拷貝到/usr/lib64/

cp /usr/local/lib64/libstdc++.so.6.0.28 /usr/lib64/
mv /usr/lib64/libstdc++.so.6.0.24 /usr/lib64/libstdc++.so.6.0.24_bak
ln -s /usr/lib64/libstdc++.so.6.0.28 /usr/lib64/libstdc++.so.6

經過如上操作,再編譯,理論上不會再報錯

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章