The GCC package contains the GNU compiler collection, which includes the C and C++ compilers.
Approximate build time: 11.7 SBU Required disk space: 294 MB
GCC installation depends on: Bash, Binutils, Coreutils, Diffutils, Findutils, Gawk, Gettext, Glibc, Grep, Make, Perl, Sed, Texinfo.
This package is known to behave badly when you have changed its default optimization flags (including the -march and -mcpu options). Therefore, if you have defined any environment variables that override default optimizations, such as CFLAGS and CXXFLAGS, we recommend un-setting or modifying them when building GCC.
Unpack the GCC-core and the GCC-g++ tarball -- they will unfold into the same directory. You should likewise extract the GCC-testsuite package. The full GCC package contains even more compilers. Instructions for building these can be found at http://www.linuxfromscratch.org/blfs/view/stable/general/gcc.html.
First apply only the No-Fixincludes patch (and not the Specs patch) also used in the previous chapter:
patch -Np1 -i ../gcc-3.3.3-no_fixincludes-1.patch
Now apply a sed substitution that will suppress the installation of libiberty.a. We want to use the version of libiberty.a provided by Binutils:
sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in
The GCC documentation recommends building GCC outside of the source directory in a dedicated build directory:
mkdir ../gcc-build cd ../gcc-build
Now prepare GCC for compilation:
../gcc-3.3.3/configure --prefix=/usr \ --enable-shared --enable-threads=posix \ --enable-__cxa_atexit --enable-clocale=gnu \ --enable-languages=c,c++
Compile the package:
make
Important | |
---|---|
The test suite for GCC in this section is considered critical. Our advice is to not skip it under any circumstance. |
Test the results, but don't stop at errors (you'll remember the few known ones):
make -k check
The test suite notes from the section called “GCC-3.3.3 - Pass 2” are still very much appropriate here. Be sure to refer back there should you have any doubts.
Now install the package:
make install
Some packages expect the C PreProcessor to be installed in the /lib directory. To support those packages, create this symlink:
ln -s ../usr/bin/cpp /lib
Many packages use the name cc to call the C compiler. To satisfy those packages, create a symlink:
ln -s gcc /usr/bin/cc
Note | |
---|---|
At this point it is strongly recommended to repeat the sanity check we performed earlier in this chapter. Refer back to the section called “Re-adjusting the toolchain” and repeat the check. If the results are wrong, then most likely you erroneously applied the GCC Specs patch from Chapter 5. |
Installed programs: c++, cc (link to gcc), cc1, cc1plus, collect2, cpp, g++, gcc, gccbug, and gcov
Installed libraries: libgcc.a, libgcc_eh.a, libgcc_s.so, libstdc++.[a,so] and libsupc++.a
cpp is the C preprocessor. It is used by the compiler to have the #include and #define and such statements expanded in the source files.
gcc is the C compiler. It is used to translate the source code of a program into assembly code.
gccbug is a shell script used to help create good bug reports.
gcov is a coverage testing tool. It is used to analyze programs to find out where optimizations will have the most effect.
libgcc* contains run-time support for gcc.
libstdc++ is the standard C++ library. It contains many frequently-used functions.
libsupc++ provides supporting routines for the c++ programming language.