Installing GCC-3.2

Estimated build time:           9.48 SBU
Estimated required disk space:  326 MB

Installation of GCC

This package requires its patch to be applied before you can install it. Make sure it's unpacked before running the installation commands.

We won't be needing a C++ compiler until Chapter 6. So, only the gcc-core tarball needs to be unpacked at this time.

This package is known to behave badly when you have changed its default optimization flags (including the -march and -mcpu options). GCC is best left alone. Therefore, if you have defined any environment variables that override default optimizations, such as CFLAGS and CXXFLAGS, we recommend unsetting or modifying them when building GCC. You have been warned.

Install GCC by running the following commands:

patch -Np1 -i ../gcc-3.2.patch &&
patch -Np1 -i ../gcc-3.2-nofixincludes-2.patch &&
mkdir ../gcc-build &&
cd ../gcc-build &&
../gcc-3.2/configure --prefix=/static \
   --disable-nls --disable-shared &&
echo "#define HAVE_GAS_HIDDEN 1" >> gcc/auto-host.h &&
make BOOT_LDFLAGS=-static bootstrap &&
make prefix=$LFS/static install &&
ln -s gcc $LFS/static/bin/cc

Command explanations

patch -Np1 -i ../gcc-3.2.patch: This patch fixes a few bugs. In particular it contains the "copy fix" and "var fix" documented at http://www.zipworld.com.au/~gschafer/lfs-tweaks.html.

patch -Np1 -i ../gcc-3.2-nofixincludes-2.patch: This prevents the fixincludes script from running.

--prefix=/static: This is NOT a typo. GCC hard codes some paths while compiling and so we need to pass /static as the prefix during ./configure. We pass the real install prefix during the make install command later.

echo "#define HAVE_GAS_HIDDEN 1": This defines the .hidden assembler directive so that we don't build a faulty Glibc later on.

make BOOT_LDFLAGS=-static: This is the equivalent to make LDFLAGS=-static as we use with other packages to compile them statically.

ln -s gcc $LFS/static/bin/cc: This creates the $LFS/static/bin/gcc symlink, which some packages need.

Contents of GCC

Last checked against version 3.1.

Program Files

c++, c++filt, cc (link to gcc), cc1, cc1plus, collect2, cpp, cpp0, g++, gcc, gccbug, gcov and tradcpp0

Descriptions

cc, cc1, cc1plus, gcc

These are the C compiler. A compiler translates source code in text format to a format that a computer understands. After a source code file is compiled into an object file, a linker will create an executable file from one or more of these compiler generated object files.

c++, cc1plus, g++

These are the C++ compiler, the equivalent of cc and gcc etc.

c++filt

The C++ language provides function overloading, which means that it is possible to write many functions with the same name (providing each takes parameters of different types). All C++ function names are encoded into a low-level assembly label (this process is known as mangling). The c++filt program does the inverse mapping: it decodes (demangles) low-level names into user-level names so that the linker can keep these overloaded functions from clashing.

collect2

collect2 assists with the compilation of constructors.

cpp, cpp0

cpp pre-processes a source file, such as including the contents of header files into the source file. Simply add a line, such as #include <filename>, to your source file. The preprocessor will insert the contents of the included file into the source file.

gccbug

gccbug is a shell script which is used to simplify the creation of bug reports.

gcov

gcov analyzes programs to help create more efficient, faster running code through optimization.

tradcpp0

No description is currently available.

Library Files

libgcc.a, libgcc_eh.a, libgcc_s.so, libiberty.a, libstdc++.[a,so], libsupc++.a

Descriptions

libgcc, libgcc_eh, libgcc_s

Run-time support files for gcc.

libiberty

libiberty is a collection of subroutines used by various GNU programs including getopt, obstack, strerror, strtol and strtoul.

libstdc++

libstdc++ is the C++ library. It is used by C++ programs and contains functions that are frequently used in C++ programs. This way the programmer doesn't have to write certain functions (such as writing a string of text to the screen) from scratch every time he creates a program.

libsupc++

libsupc++ provides support for the c++ programming language. Among other things, libsupc++ contains routines for exception handling.

GCC Installation Dependencies

Last checked against version 2.95.3.

Bash: sh
Binutils: ar, as, ld, nm, ranlib
Diffutils: cmp
Fileutils: chmod, cp, ln, ls, mkdir, mv, rm, touch
Find: find
Gcc: cc, cc1, collect2, cpp0, gcc
Grep: egrep, grep
Make: make
Patch: patch
Sed: sed
Sh-utils: basename, dirname, echo, expr, hostname, sleep, true, uname
Tar: tar
Texinfo: install-info, makeinfo
Textutils: cat, tail, tr