最近在給編譯環境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 的下載地址:請點這裡