Centos7 從源碼安裝/升級GCC(超詳細)

Centos7.6 默認安裝的gcc版本爲4.8.5,可經過命令gcc -v查看,若是須要使用gcc的最新特性,則須要源碼安裝gcc最新版。html

gcc -v 輸出的信息,包括生成makefile時候的configure,在步驟5能夠參考該配置。java

使用內建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/lto-wrapper
目標:x86_64-redhat-linux
配置爲:../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/cloog-install --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux                                                                     
線程模型:posix                                                                     
gcc 版本 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)

GCC官網-->GCC Mirror Sites-->日本Site-->gcc-8.3.0.tar.gzlinux

1.yum安裝依賴包c++

# yum install -y gcc gcc-c++ gcc-gnat libgcc libgcc.i686 glibc-devel bison flex texinfo build-essential zlib-develbootstrap

舒適提示:若出現,致命錯誤: zlib.h:沒有那個文件或目錄。

這個錯誤是由於zlib包沒有安裝,安裝後問題便可解決。
但有一點請注意安裝命令是:yum install zlib-devel,
而非yum install zlib。

下載GCC最新依賴:緩存

$ ./contrib/download_prerequisitesapp

2.安裝最新依賴到/usr/local目錄下:ide

在普通用戶權限$下便可:flex

cd gmp-6.1.0
./configure --prefix=/usr/local/gmp-6.1.0
make && make install
cd mpfr-3.1.4
./configure --prefix=/usr/local/mpfr-3.1.4 --with-gmp=/usr/local/gmp-6.1.0
make && make install
cd mpc-1.0.3
./configure --prefix=/usr/local/mpc-1.0.3 --with-gmp=/usr/local/gmp-6.1.0 --with-mpfr=/usr/local/mpfr-3.1.4
make && make install
cd isl-0.18/
./configure --prefix=/usr/local/isl-0.18 --with-gmp-prefix=/usr/local/gmp-6.1.0

在超級用戶root權限#下:ui

# make && make install

注意:

上面安裝isl-0.18包,不能像其餘的將gmp包的路徑配置到--with-gmp,而是配置到--with-gmp-prefix下,否則會報錯:

可經過查看isl-0.18源代碼的configure文件找到緣由:

3.將gcc最新依賴包添加到動態連接庫:

# vi /etc/ld.so.conf

從新搜索當前系統上全部庫文件搜索路徑下的庫文件,並生成緩存

# ldconfig -v

4.退到gcc-8.3.0目錄,新建一個編譯目錄build,用於存放編譯生成的文件:

$ mkdir build && cd build

5.進入編譯目錄build後,經過gcc-8.3.0文件夾下的configure腳本生成makefile文件。

此時的設置能夠參考前面的gcc-4.8.5的配置,-prefix配置make install的目錄(安裝目錄),--enable-languages中去掉java(不支持),僅支持本機x64配置--disable-multilib(須要支持x86就去掉)。

$ ../configure --prefix=/usr/local/gcc-8.3.0 --with-gmp=/usr/local/gmp-6.1.0 --with-mpfr=/usr/local/mpfr-3.1.4 --with-mpc=/usr/local/mpc-1.0.3 --with-isl=/usr/local/isl-0.18 --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,fortran,ada,go,lto --enable-plugin --enable-initfini-array --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux --disable-multilib

配置完成後,進行make和make install。

# make && make install

Tips:默認編譯比較慢,能夠經過-j參數來增長參加編譯的cpu核心數N(雙核cpu:make -j 2),make -j N,此處,N小於或等於每顆物理CPU中的核心數。

6.配置環境變量

# vi /etc/profile

在profile文件結尾加入一行:

export PATH=/usr/local/gcc-8.3.0/bin:$PATH

使其當即生效# source /etc/profile

7.使用gcc -v檢查gcc版本,是否爲gcc-8.3.0

8.[補充]更新動態庫

否則會致使編譯成功的新程序,運行報「/lib64/libstdc++.so.6: version 'CXXABI_1.3.8' not found」錯誤。

緣由是由於升級GCC後相應的動態庫沒有更新,致使新編譯器編譯程序成功,運行不成功。

(1)使用命令$ ls -l /usr/lib64/libstdc++.so.6你會發現當前動態庫是一個軟連接:

(2)查看動態庫:

$ strings /usr/lib64/libstdc++.so.6.0.19 | grep CXXABI

可見,最高版本1.3.7,小於須要的1.3.8,須要手動更新動態庫。

(3)前面已經將gcc8.3.0安裝到/usr/local/gcc-8.3.0/目錄,最新動態庫位於該目錄下,經過查找:

$ find /usr/local/gcc-8.3.0/ -name libstdc++.so.6*

(4)刪除舊連接:# rm -f /usr/lib64/libstdc++.so.6

(5)建立新連接:

# ln -s /usr/local/gcc-8.3.0/lib64/libstdc++.so.6.0.25 /usr/lib64/libstdc++.so.6

(6)從新查看動態庫$ strings /usr/lib64/libstdc++.so.6 | grep CXXABI

相關文章
相關標籤/搜索