Подробная информация об этом пакете находится в Раздел 8.29.2, «Содержимое пакета GCC.»
Пакет GCC содержит коллекцию компиляторов GNU, которая включает компиляторы C и C++.
Для GCC требуются пакеты GMP, MPFR и MPC. Поскольку эти пакеты могут отсутствовать в дистрибутиве вашего хоста, они будут собраны с помощью GCC. Распакуйте каждый пакет в исходный каталог GCC и переименуйте получившиеся каталоги, чтобы процедуры сборки GCC использовали их автоматически:
![[Примечание]](../images/note.png) 
          В этой главе часто возникают недоразумения, хотя применяются те же процедуры, что и в любой другой главе, следуйте инструкции которую получили ранее (Инструкции по сборке пакетов). Сначала распакуйте пакет gcc-14.2.0 из архива, а затем перейдите в созданный каталог. Только после этого следует приступить к приведенным ниже инструкциям.
tar -xf ../mpfr-4.2.1.tar.xz mv -v mpfr-4.2.1 mpfr tar -xf ../gmp-6.3.0.tar.xz mv -v gmp-6.3.0 gmp tar -xf ../mpc-1.3.1.tar.gz mv -v mpc-1.3.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
        В документации к GCC рекомендуется собирать GCC в отдельном каталоге:
mkdir -v build cd build
Подготовьте GCC к компиляции:
../configure                  \
    --target=$LFS_TGT         \
    --prefix=$LFS/tools       \
    --with-glibc-version=2.40 \
    --with-sysroot=$LFS       \
    --with-newlib             \
    --without-headers         \
    --enable-default-pie      \
    --enable-default-ssp      \
    --disable-nls             \
    --disable-shared          \
    --disable-multilib        \
    --disable-threads         \
    --disable-libatomic       \
    --disable-libgomp         \
    --disable-libquadmath     \
    --disable-libssp          \
    --disable-libvtv          \
    --disable-libstdcxx       \
    --enable-languages=c,c++
        Значение параметров настройки:
--with-glibc-version=2.40
            Этот параметр указывает версию Glibc, которая будет использоваться на целевой системе. Он не имеет отношения к libc хост-дистрибутива, потому что все, скомпилированное в этом разделе, будет выполняться в среде chroot, которая изолирована от libc хост-дистрибутива.
--with-newlib
            Поскольку работающая библиотека C еще недоступна, это гарантирует, что константа inhibit_libc будет определена при сборке libgcc. Это предотвращает компиляцию любого кода, требующего поддержки libc.
--without-headers
            При создании полного кросс-компилятора GCC требует наличия стандартных заголовков, совместимых с целевой системой. Для наших целей эти заголовки не понадобятся. Этот параметр предотвращает их поиск GCC.
--enable-default-pie и
              --enable-default-ssp
            Эти параметры позволяют GCC по умолчанию компилировать программы с некоторыми функциями усиливающими безопасность (более подробная информация о них приведена в примечание о PIE и SSP в Главе 8). На данном этапе они не является строго обязательными, поскольку компилятор будет создавать только временные исполняемые файлы. Но лучше, чтобы временные пакеты были максимально приближены к тем, что будут в готовой системе LFS.
--disable-shared
            Этот параметр заставляет GCC статически связывать свои внутренние библиотеки. Он необходим потому что общие библиотеки требуют Glibc, который еще не установлен в целевой системе.
--disable-multilib
            На x86_64, LFS не поддерживает конфигурацию multilib. Этот аргумент никак не влияет на работу с архитектурой x86.
--disable-threads, --disable-libatomic,
              --disable-libgomp, --disable-libquadmath, --disable-libssp,
              --disable-libvtv, --disable-libstdcxx
            Эти аргументы отключают поддержку расширений для работы с многопоточностью, libatomic, libgomp, libquadmath, libssp, libvtv и стандартной библиотеки C++ соответственно. Эти функции могут не скомпилироваться при сборке кросс-компилятора и не нужны для задач кросс-компиляции временной libc
--enable-languages=c,c++
            Этот параметр обеспечивает сборку только компиляторов C и C++. Это единственные языки, которые нужны сейчас.
Скомпилируйте GCC, выполнив:
make
Установите пакет:
make install
          Во время сборки GCC установил пару внутренних системных
          заголовочных файлов. Обычно один из файлов limits.h, включает соответствующие системные
          ограничения limits.h, в данном случае
          $LFS/usr/include/limits.h. Однако во
          время сборки GCC $LFS/usr/include/limits.h не существует, поэтому
          только что установленный внутренний заголовочный файл является
          частичным, автономным файлом и не включает расширенные функции
          системного файла. Этого достаточно для сборки Glibc, но полный
          внутренний заголовочный файл понадобится позже. Создайте полную
          версию внутреннего заголовочного файла с помощью команды,
          идентичной той, что система сборки GCC использует обычно:
        
![[Примечание]](../images/note.png) 
          
            В приведенной ниже команде показан пример подстановки вложенных
            команд, используя два метода: обратные кавычки и конструкцию
            $(). Его можно было бы переписать,
            используя один и тот же метод для обеих замен, но сделано так,
            чтобы продемонстрировать, как их можно использовать одновременно.
            В целом метод $() предпочтительнее.
          
cd .. cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \ `dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/include/limits.h
Подробная информация об этом пакете находится в Раздел 8.29.2, «Содержимое пакета GCC.»