這裡介紹在 CentOS Linux 7 之下自己載 gcc 6 編譯器原始碼、編譯與安裝的過程。

gcc 是 Linux 系統上最常被使用的編譯器,而 CentOS Linux 7.2 中的 gcc 版本比較舊:

gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../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
Thread model: posix
gcc version 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC)

如果想要使用比較新的功能,就會有問題。以下是自己下載 gcc 6.3.0 原始碼來編譯與安裝的過程。


安裝編譯 gcc 所需要的函式庫:

sudo yum install libmpc-devel mpfr-devel gmp-devel

gcc 的原始碼可以從 GCC 的官方網站下載,在官方網站上有列出全球各地的鏡像站,任選一個站來下載即可。

wget 下載目前最新的 gcc 6.3 版:

wget http://mirrors.concertpass.com/gcc/releases/gcc-6.3.0/gcc-6.3.0.tar.bz2

解壓縮 gcc 原始碼:

tar jxvf gcc-6.3.0.tar.bz2

進入 gcc 原始碼目錄:

cd gcc-6.3.0/

下載其他必要的原始碼:

contrib/download_prerequisites

建立編譯用的目錄:

mkdir ../gcc-build
cd ../gcc-build

使用以下參數執行 configure

../gcc-6.3.0/configure -v \
  --enable-languages=c,c++ \
  --disable-multilib \
  --prefix=/usr/local/gcc-6.3.0

這裡我打算將 gcc 6.3 安裝在 /usr/local/gcc-6.3.0 這個目錄中,如果想安裝在其他的地方,可以自己更改這個路徑。

執行 make 編譯 gcc 6,由於我是在 CPU 有 40 核心的伺服器上編譯,所以直接使用 40 個 jobs 下去平行編譯,這樣編譯速度可以快很多:

make -j40

我的機器大概等個一、二十分鐘就編完了。編譯完成後,進行安裝:

sudo mkdir /usr/local/gcc-6.3.0
sudo chown seal:seal /usr/local/gcc-6.3.0
make install

檢查一下新的 gcc 版本:

/usr/local/gcc-6.3.0/bin/gcc -v
Using built-in specs.
COLLECT_GCC=/usr/local/gcc-6.3.0/bin/gcc
COLLECT_LTO_WRAPPER=/usr/local/gcc-6.3.0/libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../gcc-6.3.0/configure -v --enable-languages=c,c++ --disable-multilib --prefix=/usr/local/gcc-6.3.0
Thread model: posix
gcc version 6.3.0 (GCC)

這樣就可以開始使用新的 gcc 6.3 編譯器了。

參考資料:StackOverflow