歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux下GLIBCXX和GLIBC版本低造成的編譯錯誤的解決方案

Linux下GLIBCXX和GLIBC版本低造成的編譯錯誤的解決方案

日期:2017/3/1 9:14:14   编辑:Linux編程

最近在給編譯環境CentOS 6.5安裝新版clang (clang 3.4/3.5)的時候,雖然已經裝了gcc 4.9.1, 但編譯的時候(參考clang官方主頁http://clang.llvm.org/get_started.html的步驟,在獨立build目錄下運行clang自帶的configure腳本),仍然出了“c compiler cannot create executables”的提示,去查看log信息,發現裡面有下面幾個錯誤:

clang: /lib64/libc.so.6: version `GLIBC_2.15' not found (required by clang)
clang: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by clang)
clang: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.18' not found (required by clang)
clang: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by clang)

這裡是兩個系統版本庫版本過低的問題,一個是關於C++的庫libstdc++, 一個是關於C系統基礎運行庫GLIBC,前者比較好辦,後者十分基礎,一般一個版本的centos會指定一個GLIBC,可以去升級,但這樣CentOS本身版本的穩定性的可能就會被破壞。

1. 我們著手解決GLIBCXX的問題,C++庫,首先查看錯誤信息提示中的lib文件的信息。

$ strings /usr/lib64/libstdc++.so.6 | grep GLIBC這裡是打印 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
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH再

$ll /usr/lib64/libstdc++.so.6lrwxrwxrwx 1 root root 30 Sep 23 06:21 /usr/lib64/libstdc++.so.6 -> /usr/lib64/libstdc++.so.6.0.13也就是系統以前有一個6.0.13版本,確實比較舊了,那麼我們有新版本麼?我們安裝了gcc 4.9.1,按理說應該已經裝了新版的libstdC++.,如果沒有,可以去網上下一個。

先在本機找:

find / -name libstdc++.so.6*
我們發現,gcc安裝時把/libstdc++.so.6.0.20 安裝到了/usr/local/lib64下,但並沒有改變libstdc++.so.6的鏈接指向。

那麼我們手動來更新軟連接(也可以字節指向/usr/local下的文件,不用拷貝, 看鴿子的文件管理習慣)

$ cp /usr/local/lib64/libstdc++.so.6.0.20 /usr/lib64
$ rm -rf /usr/lib64/libstdc++.so.6
$ ln -s /usr/lib64/libstdc++.so.6.0.20 /usr/lib64/libstdc++.so.6
$ 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
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH庫更新完畢。我們已經支持到了GLIBCXX_3.4.20

此時再進行編譯,GLIBCXX的問題是沒有了。

2. 關於C基本運行庫GLIBC,因為要慎重,所以我寫在下一篇博客:

《Linux/CentOS 升級C基本運行庫CLIBC的注意事項(當想解決GLIBC_2.x找不到的編譯問題)》http://www.linuxidc.com/Linux/2016-07/133187.htm

Linux升級Glibc http://www.linuxidc.com/Linux/2015-04/116472.htm

危險!GHOST(幽靈)漏洞曝光 http://www.linuxidc.com/Linux/2015-01/112496.htm

GNU glibc 爆 gethostbyname 緩沖區溢出漏洞 http://www.linuxidc.com/Linux/2015-01/112486.htm

glibc gethostbyname緩沖區溢出漏洞(CVE-2015-0235) http://www.linuxidc.com/Linux/2015-01/112516.htm

Linux glibc幽靈漏洞測試與修復方法 http://www.linuxidc.com/Linux/2015-01/112562tm

Glibc 的詳細介紹:請點這裡
Glibc 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved