centos 升級gcc


參考:

https://www.cnblogs.com/ToBeExpert/p/10297697.html

CentOS 7 升級gcc/g++編譯器

  gcc的升級必須要使用源碼進行升級,也就說,必須要使用源碼進行編譯才行。我的7.2的CentOS目前自帶的gcc是4.8.5的,gcc從4.8之后開始支持C++11,但是鑒於現在C++14、C++17都已經出來了,所以還是把編譯器升級一下,才能緊跟發展,嘗試使用14/17的新特性。gcc源碼下載地址:https://gcc.gnu.org/。

  

第一步:下載源代碼

 查了資料步驟上多了幾個,重做一下:

  首先:

yum -y install texinfo

  如果不執行這個命令的話,那么在執行第四步的配置的時候,會出現makeinfo:could not find this command。

  從:ftp://ftp.gnu.org/gnu/gcc/gcc-8.2.0/下載源碼包:gcc-8.2.0.tar.gz。使用命令:tar -zxvf gcc-8.2.0.tar.gz解壓。當然也可以在:https://github.com/gcc-mirror/gcc下載源碼。下載過程如下:

  選擇gcc版本,在Branches這里選擇gcc-8這個分支:

  接下來點擊旁邊的Tags,可以選擇gcc-8.2.0-Release

 

 

 

第二步:安裝依賴庫

  據說原來升級gcc的時候超級麻煩因為它依賴了mpfr、gmp、mpc 和isl共四個庫,它們下載起來也很麻煩,現在事情變得簡單了很多, 在gcc目錄下執行一次執行以下命令:

./contrib/download_prerequisites          #作用是自動下載gcc的4個依賴包

  可能會出現如下錯誤:

復制代碼
[root@CentOs64-7 gcc-8.2.0]# ./contrib/download_prerequisites 
2019-01-21 10:38:33 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2 [2383840] -> "./gmp-6.1.0.tar.bz2" [1]
2019-01-21 10:38:39 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2 [1279284] -> "./mpfr-3.1.4.tar.bz2" [1]
2019-01-21 10:38:44 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz [669925] -> "./mpc-1.0.3.tar.gz" [1]
2019-01-21 10:38:50 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2 [1658291] -> "./isl-0.18.tar.bz2" [1]
gmp-6.1.0.tar.bz2: OK
mpfr-3.1.4.tar.bz2: OK
mpc-1.0.3.tar.gz: OK
isl-0.18.tar.bz2: OK
tar (child): lbzip2: Cannot exec: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
error: Cannot extract package from gmp-6.1.0.tar.bz2
復制代碼

  這個問題其實就是因為tar解包的時候沒有解成功。這是因為機器上沒有安裝bzip2,使用如下命令安裝bzip2:

yum -y install bzip2

  安裝這個之后,把解壓后的目錄刪了,再重新走一遍上面的過程,這次就OK了,4個依賴包下載成功。

復制代碼
[root@CentOs64-7 gcc-8.2.0]# ./contrib/download_prerequisites 
2019-01-21 10:48:24 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2 [2383840] -> "./gmp-6.1.0.tar.bz2" [1]
2019-01-21 10:48:30 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2 [1279284] -> "./mpfr-3.1.4.tar.bz2" [1]
2019-01-21 10:48:34 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz [669925] -> "./mpc-1.0.3.tar.gz" [1]
2019-01-21 10:48:39 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2 [1658291] -> "./isl-0.18.tar.bz2" [1]
gmp-6.1.0.tar.bz2: OK
mpfr-3.1.4.tar.bz2: OK
mpc-1.0.3.tar.gz: OK
isl-0.18.tar.bz2: OK
All prerequisites downloaded successfully.
復制代碼

  如果想要自己安裝這些依賴包的話,可以參考這篇博客:(https://blog.csdn.net/yndu_13/article/details/82842408),但是我沒有照着這個操作,就是沒有驗證到底是否行得通……

第三步:配置

  然后使用命令:

mkdir build
cd build

  進入build目錄后,再執行下面的配置命令。

  如果你只需要支持C/C++編譯器,那么在gcc目錄下執行如下配置命令:

../configure  --prefix=/usr --enable-multilib --enable-languages=c,c++ -disable-multilib

  否則,執行:

../configure  --prefix=/usr --enable-multilib

  這條命令的作用實際上就是生成合適的Makefile,執行的過程中出現了一個警告:

configure: WARNING: using in-tree isl, disabling version check
*** This configuration is not supported in the following subdirectories:
     gnattools gotools target-libada target-libhsail-rt target-libgfortran target-libbacktrace target-libgo target-libffi target-libobjc target-liboffloadmic
    (Any other directories should still work fine.)

  說明一下,這個警告,我看了很多人的博客,都沒有提到過,有的博客倒是把它列出來了,但是卻沒有給出解決的辦法。

  配置成功以后,執行命令:

yum groupinstall "Development Tools" 

第四步:make

  第三步執行無誤后,在gcc目錄下使用make目錄。建議使用單任務make,不要使用多任務,多任務有可能會編譯報錯。

  然而安裝失敗了……

復制代碼
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... configure: error: Link tests are not allowed after GCC_NO_EXECUTABLES.
make[2]: *** [configure-stage1-zlib] 錯誤 1
make[2]: 離開目錄“/root/gcc-8.2.0”
make[1]: *** [stage1-bubble] 錯誤 2
make[1]: 離開目錄“/root/gcc-8.2.0”
make: *** [all] 錯誤 2
復制代碼

  先把原來安裝的東西都清理一下:

make distclean

  這個問題,就是我把執行了一下 yum -y install texinfo,然后把整個過程重新走了一遍,就沒有問題了。

第四步

  安裝,執行命令

make install

  等待安裝結束后就能正常使用gcc了。現在使用gcc -v 檢查版本的話,就是gcc 8.2.0。在make的過程中也有一些警告,目前尚不知這些警告會造成何種影響,這些警告有點兒多,沒有逐一記錄下來,如果有后來者看到這篇博客,並遇到了和我一樣的困擾,並且解決了這個問題,煩請告之,感激不盡。

  升級gcc/g++的必要性,現在下載到的CentOS鏡像中自帶的gcc版本是4.8.5,gcc從4.8開始支持C++11,但是在以后的編碼工作中勢必會用到C++14、C++17乃至更新的標准下的新特性,既然標准庫已經造出了輪子,為什么我們不用呢?而要使用這些新特性,你就必須要獲得編譯器的支持。

 

補充:

  升級gcc的一個更加簡單的做法,但是這個做法的缺點是只支持64位程序而無32位支持。

  采用CentOS的一個第三方庫SCL(軟件選集),SCL可以在不覆蓋原系統軟件包的情況下安裝新的軟件包與老軟件包共存並且可以使用scl命令切換,不過也有個缺點就是只支持64位的。還有devtoolset-4(gcc 5.2)及之前的版本都已經結束支持,只能通過其他方法安裝。

  本次升級到gcc8,命令如下:

yum -y install centos-release-scl
yum -y install devtoolset-8-gcc devtoolset-8-gcc-c++ devtoolset-8-binutils
scl enable devtoolset-8 bash  #啟動gcc8

  你要哪個版本的就把第2條命令中的數字8改成你要的主版本號就可以了。這樣升級到的是最新的版本。例如8升級到的是8.2.0而不是8.1。

  通過scl命令啟動gcc,這個只是暫時的,當你的shell關閉后或者重啟就會恢復原來的版本,要想一直使用升級后的版本可以使用如下命令:

echo "source /opt/rh/devtoolset-8/enable" >>/etc/profile


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM