GCC-5.2.0
      
      
        
          Introduction to GCC
        
        
          The GCC package contains the GNU
          Compiler Collection. This page describes the installation of
          compilers for the following languages: C, C++, Fortran, Objective
          C, Objective C++, and Go. Two additional languages , Ada and Java
          are available in the collection. They have specific requirements,
          so they are described in separate pages (GCC-Ada-5.2.0 and
          GCC-Java-5.2.0). Since C and C++ are installed
          in LFS, this page is either for upgrading C and C++, or for
          installing additional compilers.
        
        
          This package is known to build and work properly using an LFS-7.8
          platform.
        
        
          ![[Caution]](../images/caution.png) 
          
            Caution
          
          
            If you are upgrading GCC from
            any other version prior to 5.2.0, then you must be careful
            compiling 3rd party kernel modules. You should ensure that the
            kernel and all its native modules are also compiled using the
            same version of GCC that you use
            to build the 3rd party module. This issue does not affect native
            kernel (and kernel modules) updates, as the instructions below
            are a complete reinstallation of GCC. If you have existing 3rd party modules
            installed, ensure they are recompiled using the updated version
            of GCC. As always, never update
            the kernel headers from the ones used when Glibc was compiled during LFS.
          
          
            The 5.1.0 version of GCC introduces an incompatible ABI change in
            the C++ library libstdc++.so. This
            does not prevent using programs compiled with the previous
            version of GCC , since both old
            and new symbols are available in the library. But compiling, with
            the new version, programs which use libraries compiled with the
            old version is likely to give errors. So, if you are upgrading
            from any previous version prior to 5.1.0, you have two solutions:
            recompile all the libraries with the new version, or use the
            --with-default-libstdcxx-abi switch
            to configure.
          
         
        
          Package Information
        
        
        
          GCC Dependencies
        
        
          Recommended
        
        
          DejaGnu-1.5.3, for tests
        
        
          User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gcc
        
       
      
        
          Installation of GCC
        
        
          ![[Important]](../images/important.png) 
          
            Important
          
          
            Even if you specify only languages other than C and C++ to the
            ./configure command
            below, the installation process will overwrite your existing
            GCC C and C++ compilers and
            libraries. Having the Tcl,
            Expect and DejaGnu packages installed before beginning
            the build is highly recommended so you can run the full suite of
            tests.
          
          
            Do not continue with the make
            install command until you are confident the build
            was successful. You can compare your test results with those
            found at http://gcc.gnu.org/ml/gcc-testresults/.
            You may also want to refer to the information found in the
            GCC section of Chapter 6 in the
            LFS book (../../../../lfs/view/7.8/chapter06/gcc.html).
          
         
        
          The instructions below are intentionally performing a
          “bootstrap” process.
          Bootstrapping is needed for robustness and is highly recommended
          when upgrading the compilers version. To disable bootstrap anyways,
          add --disable-bootstrap to
          the ./configure
          options below.
        
        
          Install GCC by running the
          following commands:
        
        
mkdir ../gcc-build                                   &&
cd    ../gcc-build                                   &&
../gcc-5.2.0/configure                               \
    --prefix=/usr                                    \
    --disable-multilib                               \
    --with-system-zlib                               \
    --enable-languages=c,c++,fortran,go,objc,obj-c++ &&
make
        
          If you have installed additional packages such as Valgrind and GDB, the GCC
          part of the testsuite will run more tests than in LFS. Some of
          those will report FAIL and others XPASS (pass when expected to
          FAIL). To run the tests, issue:
        
        
ulimit -s 32768 &&
make -k check
        
          The tests are very long, and the results may be hard to find in the
          logs, specially if you use parallel jobs with make. You can get a
          summary of the tests with:
        
        
../gcc-5.2.0/contrib/test_summary
        
          Now, as the root user:
        
        
make install &&
mkdir -pv /usr/share/gdb/auto-load/usr/lib              &&
mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib &&
chown -v -R root:root \
    /usr/lib/gcc/*linux-gnu/5.2.0/include{,-fixed}
        
          Some packages expect to find the C preprocessor in /lib or may refer to the C compiler under the
          name cc. The
          following symbolic links are not needed if you have followed the
          LFS instructions, since they have been already created. If you do
          not have them on your system, issue as the root user:
        
        
ln -v -sf ../usr/bin/cpp /lib          &&
ln -v -sf gcc /usr/bin/cc              &&
install -v -dm755 /usr/lib/bfd-plugins &&
ln -sfv ../../libexec/gcc/$(gcc -dumpmachine)/5.2.0/liblto_plugin.so /usr/lib/bfd-plugins/
       
      
        
          Command Explanations
        
        
          mkdir ../gcc-build; cd
          ../gcc-build: The GCC documentation recommends building the
          package in a dedicated build directory.
        
        
          --disable-multilib: This
          parameter ensures that files are created for the specific
          architecture of your computer.
        
        
          --with-system-zlib: Uses
          the system zlib instead of the
          bundled one. zlib is used for
          compressing and uncompressing GCC's intermediate language in LTO (Link Time
          Optimization) object files.
        
        
          --enable-languages=c,c++,fortran,go,objc,obj-c++:
          This command identifies which languages to build. You may modify
          this command to remove undesired languages.
        
        
          --with-default-libstdcxx-abi=c++98: Use
          this switch if you are upgrading from a GCC version prior to 5.1.0, and you do not
          want to recompile all the libraries written in C++.
        
        
          ulimit -s 32768: This
          command prevents several tests from running out of stack space.
        
        
          make -k check: This
          command runs the test suite without stopping if any errors are
          encountered.
        
        
          ../gcc-5.2.0/contrib/test_summary:
          This command will produce a summary of the test suite results. You
          can append | grep -A7
          Summ to the command to produce an even more
          condensed version of the summary. You may also wish to redirect the
          output to a file for review and comparison later on.
        
        
          mv -v /usr/lib/*gdb.py
          ...: The installation stage puts some files used by
          gdb under the /usr/lib directory. This generates spurious error
          messages when performing ldconfig. This command moves the
          files to another location.
        
        
          chown -v -R root:root
          /usr/lib/gcc/*linux-gnu/...: If the package is
          built by a user other than root, the ownership of the installed
          include directory (and its content)
          will be incorrect. This command changes the ownership to the
          root user and group.
        
       
      
        
          Contents
        
        
          Some program and library names and descriptions are not listed
          here, but can be found at ../../../../lfs/view/7.8/chapter06/gcc.html#contents-gcc
          as they were initially installed during the building of LFS.
        
        
          
            
              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 in
              /usr/lib/gcc, /usr/libexec/gcc, and /usr/lib/go
            
            
              Installed Directories:
              /usr/lib/gcc/<arch-triplet>/5.2.0/include/objc
              and /usr/lib/go
            
           
         
        
          
            Short Descriptions
          
          
            
            
              
                | 
                    gccgo
                   | 
                    is a GCC-based compiler for the Go language.
                   | 
              
                | 
                    go
                   | 
                    is a tool for managing Go source code.
                   | 
              
                | 
                    gofmt
                   | 
                    is a tool for formatting Go source code.
                   | 
              
                | 
                    gfortran
                   | 
                    is a GCC-based compiler for the Fortran language.
                   | 
            
          
         
       
      
        Last updated on 2015-09-19 13:16:52 -0700