介紹
GCC 全稱是 GNU Compiler Collection。 GCC 原本是指 C 語言的編譯器,后來逐漸集成了許多其他語言的編譯,因次其含義就改成了 GNU Compiler Collection,它能支持編譯的語言有 C, C++, Fortran, Objective C, Objective C++, 以及 Go 語言。它甚至還能編譯 Ada 和 Java,但是有特殊的要求,這里暫不詳述。
本文介紹在 Ubuntu 系統(tǒng)中源碼安裝 GCC 最新的發(fā)布版 GCC 6.3.0,在其他 Linux 系統(tǒng)中的安裝方法類似。
如果當(dāng)前的機(jī)器是升級安裝,最好不要覆蓋原有的 GCC 版本,因為如果本地安裝了第三方的 Kernel 組件的話,一旦覆蓋安裝,有可能導(dǎo)致這些組件無法工作,除非我們把這些安裝的第三方庫及組件也使用最新安裝的 GCC 重新編譯。
下載
http://ftpmirror.gnu.org/gcc/gcc-6.3.0/gcc-6.3.0.tar.bz2
ftp://ftp.gnu.org/gnu/gcc/gcc-6.3.0/gcc-6.3.0.tar.bz2
MD5 sum: 677a7623c7ef6ab99881bc4e048debb6
size: 95 MB
Estimated disk space required: 7.7 GB (with tests)
依賴
- GMP4.2+, MPFR 2.4.0+, and MPC 0.8.0+
- flex
- zlib
編譯
case $(uname -m) in
x86_64)
sed -e '/m64=/s/lib64/lib/' \
-i.orig gcc/config/i386/t-linux64
;;
esac
mkdir build &&
cd build &&
../configure \
--prefix=/usr \
--disable-multilib \
--with-system-zlib \
--enable-languages=c,c++,fortran,go,objc,obj-c++ &&
make
如果缺少依賴,那么可能會在執(zhí)行 ./configure
的過程中出現(xiàn)錯誤,也可能在執(zhí)行 make
進(jìn)行編譯的過程中出現(xiàn)錯誤。
(1) GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+
configure: error: Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+.
Try the --with-gmp, --with-mpfr and/or --with-mpc options to specify their locations.
在 Ubuntu 中執(zhí)行這個命令可以安裝上述3個依賴包:
$ sudo apt-get install libgmp-dev libmpfr-dev libmpc-dev
如果想源碼安裝上述3個依賴包的最新版本,可以參考這篇文章:
(2) flex
sudo apt-get install flex
如果需要源碼編譯安裝,那么 flex 有如下依賴:
- compiler suite - flex is built with gcc
- bash, or a good Bourne-style shell
- m4 - m4 -p needs to work; GNU m4 and a few others are suitable
- GNU bison; to generate parse.c from parse.y
- autoconf; for handling the build system
- automake; for Makefile generation
- gettext; for i18n support
- help2man; to generate the flex man page
- tar, gzip, lzip, etc.; for packaging of the source distribution
- GNU texinfo;
(3) zlib
sudo apt-get install zlib1g-dev
注意: 執(zhí)行 make
進(jìn)行編譯后,這個過程會非常漫長,如果機(jī)器性能一般,可能長達(dá)好幾個小時,請做好心理準(zhǔn)備。
安裝
一旦成功編譯,安裝過程就非常簡單,因為這個步驟只是把編譯好的文件(二進(jìn)制,庫,頭文件,文檔等)拷貝到系統(tǒng)目錄。 執(zhí)行下列命令進(jìn)行安裝(確保是 root 權(quán)限下操作)。
make install
編譯選項相關(guān)解釋
--disable-multilib: 這個選項只會生成當(dāng)前系統(tǒng)的庫,比如當(dāng)前系統(tǒng)是64位,那么只會生成 64 位的庫,而不會生成 32 位的庫。
--with-system-zlib: 使用系統(tǒng)的 zlib 庫,而不是源碼中附帶的 zlib。如果系統(tǒng)沒有安裝 zlib,那么可以執(zhí)行apt-get install zlib1g-dev
來安裝
--enable-languages=c,c++,fortran,go,objc,obj-c++: 指定生成哪些語言所需的編譯器,如果不指定,那么默認(rèn)會編譯所有語言所需的編譯器。
--with-default-libstdcxx-abi=gcc4-compatible: 如果是升級安裝 GCC 并且原 GCC 版本地獄 5.1.0 的話,這個選項可以讓你避免重編譯原有的C++語言所編寫的庫
make -k check: 在跑測試的時候即使遇到 error 也不停下來,而是跑完所有 test。
../contrib/test_summary: 這個命令可以生成總的測試結(jié)果概述。
mv -v /usr/lib/*gdb.py ...: 把一些 gdb 可能要用到的文件放到 /usr/lib 目錄中。
所有安裝的程序及庫
Installed Programs: gccgo, go, gofmt and gfortran, hard-linked to architecture specific names
Installed Libraries: libgfortran.{so,a}, libgo.{so,a}, libgobegin.a, libgolibbegin.a, libnetgo.a, libobjc.{so,a}, and numerous other run-time libraries and executables
Installed Directories: /usr/lib/go/6.3.0
二進(jìn)制程序介紹
gccgo 一個基于 GCC 的 Go 語言編譯器
go 用于管理 Go 源碼的工具
gofmt 用于格式化 Go 源碼
gfortran 一個基于 GCC 的 Fortran 語言編譯器
參考
http://www.linuxfromscratch.org/blfs/view/cvs/general/gcc.html