Подробная информация об этом пакете находится в Раздел 8.26.2, «Содержимое пакета GCC.»
Пакет GCC содержит коллекцию компиляторов GNU, которая включает компиляторы C и C++.
Как и при первой сборке GCC, требуются пакеты GMP, MPFR и MPC. Распакуйте архивы и переместите их в каталоги с нужными именами:
tar -xf ../mpfr-4.1.0.tar.xz mv -v mpfr-4.1.0 mpfr tar -xf ../gmp-6.2.1.tar.xz mv -v gmp-6.2.1 gmp tar -xf ../mpc-1.2.1.tar.gz mv -v mpc-1.2.1 mpc
При сборке на x86_64 измените имя каталога по умолчанию для 64-разрядных библиотек на «lib».:
case $(uname -m) in
  x86_64)
    sed -e '/m64=/s/lib64/lib/' -i.orig gcc/config/i386/t-linux64
  ;;
esac
        Переопределите правила сборки заголовочных файлов libgcc и libstdc++, чтобы разрешить создание этих библиотек с поддержкой потоков POSIX:
sed '/thread_header =/s/@.*@/gthr-posix.h/' \
    -i libgcc/Makefile.in libstdc++-v3/include/Makefile.in
        Снова создайте отдельный каталог сборки:
mkdir -v build cd build
Перед началом сборки GCC не забудьте отключить все переменные среды, которые переопределяют флаги оптимизации по умолчанию.
Теперь подготовьте GCC к компиляции:
../configure                                       \
    --build=$(../config.guess)                     \
    --host=$LFS_TGT                                \
    --target=$LFS_TGT                              \
    LDFLAGS_FOR_TARGET=-L$PWD/$LFS_TGT/libgcc      \
    --prefix=/usr                                  \
    --with-build-sysroot=$LFS                      \
    --enable-initfini-array                        \
    --disable-nls                                  \
    --disable-multilib                             \
    --disable-decimal-float                        \
    --disable-libatomic                            \
    --disable-libgomp                              \
    --disable-libquadmath                          \
    --disable-libssp                               \
    --disable-libvtv                               \
    --enable-languages=c,c++
        Значение новых параметров настройки:
--with-build-sysroot=$LFS
            
                Обычно, использование --host гарантирует, что для
                сборки GCC используется кросс-компилятор, и этот компилятор
                знает, что он должен искать заголовочные файлы и библиотеки в
                $LFS. Но сборочная система GCC
                использует другие инструменты, которые не знают об этом
                местоположении. Этот переключатель необходим для того, чтобы
                они могли находить нужные файлы в $LFS, а не на хосте.
              
--target=$LFS_TGT
            
                Поскольку мы выполняем кросс-компиляцию GCC, невозможно
                создать целевые библиотеки (libgcc и libstdc++) со скомпилированными двоичными
                файлами GCC, потому что эти двоичные файлы не будут работать
                на хост-дистрибутиве. Система сборки GCC попытается
                использовать компиляторы C и C++ в хост-дистрибутиве в
                качестве обходного пути. Сейчас не поддерживается создание
                целевых библиотек GCC с другими версиями GCC, поэтому
                использование хост-компиляторов может привести к отказу
                сборки. Этот параметр обеспечивает сборку библиотек с помощью
                GCC собранного на первом проходе, чтобы предотвратить
                проблему
              
LDFLAGS_FOR_TARGET=...
            
                Разрешить libstdc++
                использовать общую библиотеку libgcc, собранную на этом проходе, вместо
                статической версии, собранной в GCC Проход 1. Это необходимо
                для поддержки обработки исключения C++
              
--enable-initfini-array
            Этот параметр автоматически включается при сборке нативного компилятора с родным компилятором на x86. Но здесь мы собираем кросс-компилятор, поэтому нам нужно явно указать эту опцию.
Скомпилируйте пакет:
make
Установите пакет:
make DESTDIR=$LFS install
В качестве завершающего штриха создайте символическую ссылку на утилиту. Многие программы и скрипты используют cc вместо gcc, чтобы сделать программы более универсальными и, следовательно, для соместимости со всеми типами UNIX-систем, где компилятор GNU C не всегда установлен. Наличие cc оставляет системному администратору право самостоятельно решать, какой компилятор C устанавливать:
ln -sv gcc $LFS/usr/bin/cc
Подробная информация об этом пакете находится в Раздел 8.26.2, «Содержимое пакета GCC.»