2021-05-12 14:32:11
CentOS上原始碼安裝Clang 3.8
之前想在CentOS系統上安裝clang 3.6版本,由於yum上版本太低,想通過原始碼編譯安裝。按照網上說的原始碼安裝步驟,下好llvm、clang、clang-tools-extra和compiler-rt後,總在make install的最後一步安裝失敗。為了找到解決辦法,去查llvm.org官網資訊,結果發現從clang 3.8開始官網開始提供適於centos 6版本的二進位制版本:Clang for CentOS 6 x86_64 (.sig) 果斷下載二進位制版本,解壓並cd到bin目錄,執行clang --version命令,出現以下提示資訊:
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。
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
再查gcc版本,發現是4.4,確實比較舊,先升級gcc版本。
由於公司機房網路限制不能上外網,安裝gcc比較曲折。先通過別的方式準備好gcc的安裝包gcc-4.8.2.tar.gz。解壓gcc-4.8.2.tar.gz到當前目錄下,並進入gcc目錄,如果有網路,執行./contrib/download_prerequisites檔案可以直接幫我們安裝依賴,沒有網路的話,檢視/contrib/download_prerequisites檔案,裡面主要是下載安裝三個檔案:mpfr/gmp/mpc。這裡只能自己手動安裝。
分別下載mpfr/gmp/mpc三個檔案,並解壓安裝。由於mpc依賴於mpfr和gmp,mpfr依賴於gmp,故安裝順序依次為gmp、mpfr、mpc。
編譯安裝gmp
$tar -jvxf ~/gmp-4.3.2.tar.bz2
$cd gmp-4.3.2
$./configure --prefix=~/gcclib/gmp432(自定義設定路徑)
$make && make install
編譯安裝mpfr
$tar -jxvf ~/mpfr-2.4.2.tar.bz2
$cd mpfr-2.4.2/
$./configure --prefix=~/gcclib/mpfr242 --with-gmp=~/gcclib/gmp432/ (依賴於gmp)
$make && make install
編譯安裝mpc
$tar -zxvf ~/mpc-0.8.1.tar.gz
$cd mpc-0.8.1/
$./configure --prefix=~/gcclib/mpc081 --with-gmp=~/gcclib/gmp432/ --with-mpfr=~/gcclib/mpfr242/ (依賴於gmp與mpfr)
$make && make install
編譯安裝gcc
$tar -zvxf ~/gcc-4.8.2.tar.gz
$cd gcc-4.8.2
$./configure --prefix=~/gcc482 --enable-threads=posix --disable-checking --disable-multilib --enable-languages=c,c++ --with-gmp=~/gcclib/gmp432/ --with-mpfr=~/gcclib/mpfr242/ --with-mpc=~/gcclib/mpc081/
解釋一下引數:
--enable-threads=posix//可用執行緒
-disable-checking//禁用檢查
--disable-multilib//預設gcc 能在32位元系統上將程式碼編譯成64位元程式,或者在64位元系統上編譯成32位元程式,如果加上這個編譯選項則表示關閉這個gcc的交叉編譯功能。
--enable-languages //指定 gcc 能編譯哪些語言的檔案,每種語言用逗號分隔, 例如 c,c++,Java
詳細的引數介紹可以在官網看到:https://gcc.gnu.org/install/configure.html
$如果此時執行"make"命令的話,那後果會相當的痛苦,預設安裝情況,所有lib共用庫都會被放到系統目錄下如64位元的/usr/lib64/,而我們手動指定目錄的形式,系統在編譯構建的時候是找不到的,就是說GCC找不到之前我們安裝的三個lib庫,so我們這樣做,即使沒許可權,仍可以建立全域性的臨時路徑。
$export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/gcclib/gmp432/lib:~/gcclib/mpfr242/lib:~/gcclib/mpc081/lib(保證原有的引數正確,加上新的共用路徑,用冒號分隔)
$make(需要時間較長)
$make install
$~/gcc482/bin/gcc -v (檢視安裝版本,驗證是否安裝成功)
安裝完成後再建立軟連結即可。
2.升級GLIBC_2.15'
glibc的下載地址:http://ftp.gnu.org/gnu/glibc/
或者:http://www.gnu.org/software/libc/download.html
------------------------------------------------------------------------
安裝:
下載的glibc的原始碼解壓到某個目錄,並進入原始碼目錄 建立構建目錄,並cd進入構建目錄:
$ mkdir build
$ cd build
設定:
執行configure :
$ ../configure --prefix=/opt/glibc-2.15
$ make -j4
$ sudo make install
臨時修改環境變數:
$ export LD_LIBRARY_PATH=/opt/glibc-2.15/lib:$LD_LIBRARY_PATH
安裝完成後,執行clang不再報錯。
本文永久更新連結地址:http://www.linuxidc.com/Linux/2017-03/141330.htm
相關文章