EL6 GCC 4.6 套件

  1. 必須使用 gcc-4.6 以上套件才能滿足 libstdc++.so.6(GLIBCXX_3.4.15),但 CentOS 6 目前最高版本為 gcc-4.4,雖然 steam repo 中已有編譯好的 gcc-4.7 相關的套件,但安裝時 filesystem 必須 >= 3,目前 CentOS 6 的 filesystem 最高版本為 filesystem-2.4.30,因沒找到 filesystem-3.xxx.el6.x86_64.rpm 套件,所以下載 fedora 16 的 srpm 自行編譯。
    [dywang@dywnb ~]$ cd rpmbuild
    [dywang@dywnb rpmbuild]$ wget ftp://ftp.pbone.net/vol4/archive.fedoraproject.org/fedora/linux/\
    releases/16/Everything/source/SRPMS/gcc-4.6.2-1.fc16.src.rpm
    [dywang@dywnb rpmbuild]$ wget ftp://ftp.pbone.net/vol4/archive.fedoraproject.org/fedora/linux/\
    releases/16/Everything/source/SRPMS/binutils-2.21.53.0.1-2.fc16.src.rpm
    
  2. 安裝 binutils 及 gcc srpm 套件。
    [dywang@dywnb rpmbuild]$ rpm -ivh binutils-2.21.53.0.1-2.fc16.src.rpm 
    [dywang@dywnb rpmbuild]$ rpm -ivh gcc-4.6.2-1.fc16.src.rpm
    
  3. 重建 binutils rpm 套件。
    [dywang@dywnb rpmbuild]$ rpmbuild -ba ~/rpmbuild/SPECS/binutils.spec
    
  4. 安裝建好的 binutils 相關 rpm 套件。
    [dywang@dywnb rpmbuild]$ sudo rpm -Uvh ~/rpmbuild/RPMS/x86_64/binutils-*
    
  5. 修改 gcc.spec 要求 libmpc-devel 版本必須 >=0.8-3。
    [dywang@dywnb rpmbuild]$ cp SPECS/gcc.spec SPECS/gcc.spec.orig 
    [dywang@dywnb rpmbuild]$ vim SPECS/gcc.spec 
    [dywang@dywnb rpmbuild]$ diff -uN SPECS/gcc.spec.orig SPECS/gcc.spec
    --- SPECS/gcc.spec.orig	2011-10-27 19:07:27.000000000 +0800
    +++ SPECS/gcc.spec	2016-07-07 16:02:57.189504261 +0800
    @@ -296,7 +296,7 @@
     Requires: libquadmath = %{version}-%{release}
     Requires: libquadmath-devel = %{version}-%{release}
     %endif
    -BuildRequires: gmp-devel >= 4.1.2-8, mpfr-devel >= 2.2.1, libmpc-devel >= 0.8.1
    +BuildRequires: gmp-devel >= 4.1.2-8, mpfr-devel >= 2.2.1, libmpc-devel >= 0.8-3
     Requires(post): /sbin/install-info
     Requires(preun): /sbin/install-info
     Autoreq: true
    @@ -1083,7 +1083,7 @@
     cp -r -p ../libstdc++-v3/doc/html ../rpm.doc/libstdc++-v3/html
     cp -r -p $libstdcxx_doc_builddir/html ../rpm.doc/libstdc++-v3/html/api
     mkdir -p %{buildroot}%{_mandir}/man3
    -cp -r -p $libstdcxx_doc_builddir/man/man3/* %{buildroot}%{_mandir}/man3/
    +#cp -rf -p $libstdcxx_doc_builddir/man/* %{buildroot}%{_mandir}/man3/
     find ../rpm.doc/libstdc++-v3 -name \*~ | xargs rm
     %endif
    
  6. 重建 gcc-4.6.2 相關套件,若有相依套件要安裝,必須先裝好,整個編譯過程要花 2 小時以上。
    [dywang@dywnb rpmbuild]$ rpmbuild -ba ~/rpmbuild/SPECS/gcc.spec
    
  7. 編譯完產生以下 gcc 相關 rpm 套件。
    [dywang@dywnb rpmbuild]$ ls RPMS/x86_64/*4.6.2*.rpm
    RPMS/x86_64/cpp-4.6.2-1.el6.x86_64.rpm                 RPMS/x86_64/libgnat-4.6.2-1.el6.x86_64.rpm
    RPMS/x86_64/gcc-4.6.2-1.el6.x86_64.rpm                 RPMS/x86_64/libgnat-devel-4.6.2-1.el6.x86_64.rpm
    RPMS/x86_64/gcc-base-debuginfo-4.6.2-1.el6.x86_64.rpm  RPMS/x86_64/libgnat-static-4.6.2-1.el6.x86_64.rpm
    RPMS/x86_64/gcc-c++-4.6.2-1.el6.x86_64.rpm             RPMS/x86_64/libgo-4.6.2-1.el6.x86_64.rpm
    RPMS/x86_64/gcc-debuginfo-4.6.2-1.el6.x86_64.rpm       RPMS/x86_64/libgo-devel-4.6.2-1.el6.x86_64.rpm
    RPMS/x86_64/gcc-gfortran-4.6.2-1.el6.x86_64.rpm        RPMS/x86_64/libgomp-4.6.2-1.el6.x86_64.rpm
    RPMS/x86_64/gcc-gnat-4.6.2-1.el6.x86_64.rpm            RPMS/x86_64/libgo-static-4.6.2-1.el6.x86_64.rpm
    RPMS/x86_64/gcc-go-4.6.2-1.el6.x86_64.rpm              RPMS/x86_64/libmudflap-4.6.2-1.el6.x86_64.rpm
    RPMS/x86_64/gcc-java-4.6.2-1.el6.x86_64.rpm            RPMS/x86_64/libmudflap-devel-4.6.2-1.el6.x86_64.rpm
    RPMS/x86_64/gcc-objc-4.6.2-1.el6.x86_64.rpm            RPMS/x86_64/libmudflap-static-4.6.2-1.el6.x86_64.rpm
    RPMS/x86_64/gcc-objc++-4.6.2-1.el6.x86_64.rpm          RPMS/x86_64/libobjc-4.6.2-1.el6.x86_64.rpm
    RPMS/x86_64/gcc-plugin-devel-4.6.2-1.el6.x86_64.rpm    RPMS/x86_64/libquadmath-4.6.2-1.el6.x86_64.rpm
    RPMS/x86_64/libgcc-4.6.2-1.el6.x86_64.rpm              RPMS/x86_64/libquadmath-devel-4.6.2-1.el6.x86_64.rpm
    RPMS/x86_64/libgcj-4.6.2-1.el6.x86_64.rpm              RPMS/x86_64/libquadmath-static-4.6.2-1.el6.x86_64.rpm
    RPMS/x86_64/libgcj-devel-4.6.2-1.el6.x86_64.rpm        RPMS/x86_64/libstdc++-4.6.2-1.el6.x86_64.rpm
    RPMS/x86_64/libgcj-src-4.6.2-1.el6.x86_64.rpm          RPMS/x86_64/libstdc++-devel-4.6.2-1.el6.x86_64.rpm
    RPMS/x86_64/libgfortran-4.6.2-1.el6.x86_64.rpm         RPMS/x86_64/libstdc++-docs-4.6.2-1.el6.x86_64.rpm
    RPMS/x86_64/libgfortran-static-4.6.2-1.el6.x86_64.rpm  RPMS/x86_64/libstdc++-static-4.6.2-1.el6.x86_64.rpm