>

介绍

GCC 全称是 GNU Compiler Collection。 GCC 原本是指 C 语言的编译器,后来逐渐集成了许多其他语言的编译,因次其含义就改成了 GNU Compiler Collection,它能支持编译的语言有 C, C++, Fortran, Objective C, Objective C++, 以及 Go 语言。它甚至还能编译 Ada 和 Java,但是有特殊的要求,这里暂不详述。

本文介绍在 Ubuntu 系统中源码安装 GCC 最新的发布版 GCC 6.3.0,在其他 Linux 系统中的安装方法类似。
如果当前的机器是升级安装,最好不要覆盖原有的 GCC 版本,因为如果本地安装了第三方的 Kernel 组件的话,一旦覆盖安装,有可能导致这些组件无法工作,除非我们把这些安装的第三方库及组件也使用最新安装的 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

编译

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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

如果缺少依赖,那么可能会在执行 ./configure 的过程中出现错误,也可能在执行 make 进行编译的过程中出现错误。

(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 中执行这个命令可以安装上述3个依赖包:

1
$ 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

注意: 执行 make 进行编译后,这个过程会非常漫长,如果机器性能一般,可能长达好几个小时,请做好心理准备。

安装

一旦成功编译,安装过程就非常简单,因为这个步骤只是把编译好的文件(二进制,库,头文件,文档等)拷贝到系统目录。 执行下列命令进行安装(确保是 root 权限下操作)。

make install

编译选项相关解释

–disable-multilib: 这个选项只会生成当前系统的库,比如当前系统是64位,那么只会生成 64 位的库,而不会生成 32 位的库。
–with-system-zlib: 使用系统的 zlib 库,而不是源码中附带的 zlib。如果系统没有安装 zlib,那么可以执行apt-get install zlib1g-dev 来安装
–enable-languages=c,c++,fortran,go,objc,obj-c++: 指定生成哪些语言所需的编译器,如果不指定,那么默认会编译所有语言所需的编译器。
–with-default-libstdcxx-abi=gcc4-compatible: 如果是升级安装 GCC 并且原 GCC 版本地狱 5.1.0 的话,这个选项可以让你避免重编译原有的C++语言所编写的库
make -k check: 在跑测试的时候即使遇到 error 也不停下来,而是跑完所有 test。
../contrib/test_summary: 这个命令可以生成总的测试结果概述。
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

二进制程序介绍

gccgo 一个基于 GCC 的 Go 语言编译器
go 用于管理 Go 源码的工具
gofmt 用于格式化 Go 源码
gfortran 一个基于 GCC 的 Fortran 语言编译器

参考

http://www.linuxfromscratch.org/blfs/view/cvs/general/gcc.html


如果你对我的文章感兴趣,欢迎留言或者关注我的专栏。

微信公众号:“知辉”

搜索“deliverit”或

扫描二维码