CentOS7下libstdc++.so.6: version `GLIBCXX_3.4.21' not found 的解決辦法

問題背景

最新搞 webassembly 安裝emcc 遇到這個問題

emcc hello.c -o hello.html -static-libgcc -static-libstdc++
/root/emsdk/upstream/bin/llc: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /root/emsdk/upstream/bin/llc)
/root/emsdk/upstream/bin/llc: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /root/emsdk/upstream/bin/../lib/libLLVM-11git.so)
/root/emsdk/upstream/bin/llc: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /root/emsdk/upstream/bin/../lib/libLLVM-11git.so)
shared:ERROR: error running `llc --version`.  Check your llvm installation (/root/emsdk/upstream/bin/llc)

RT

報錯原因

# 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.4
GLIBC_2.3.2
GLIBCXX_DEBUG_MESSAGE_LENGTH

libstdc++.so.6 太舊了,很顯然沒有 GLIBCXX_3.4.20, GLIBCXX_3.4.21。Google 大爺也沒有救出來,因爲 CentOS 7.X 官方發行版,沒有最新更新。如果你是其他版本是可救的,下載一個替換一下即可,或者執行 yum update libstdc++ ,如果支持的話。注意更新對 CentOS 7.X 這個無效。

解決辦法

方案1

升級CentOS到8,或者換其他高版本發行版。這意味着重裝系統。如果是雲服務器,還好一些。

方案2

升級GCC,默認CentOS 7X yum install gcc 的版本還是4.x的,這個版本下的動態庫就比較舊了(GCC最新版本是9.3)。那麼就需要升級了,升級的辦法嘛,手動編譯安裝。建議直接幹到gcc 8.X以上。至於GCC如何編譯安裝,找度娘或者谷歌大爺都行,這裏不贅述了。
另外,值得提醒一點。如果你的機器配置小於1G1核,那麼就放棄編譯安裝的念頭吧。

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