Подробная информация об этом пакете находится в Раздел 8.5.4, «Содержимое пакета Glibc.»
Пакет Glibc содержит основную библиотеку C. Эта библиотека предоставляет основные процедуры для выделения памяти, поиска в каталогах, открытия и закрытия файлов, чтения и записи файлов, обработки строк, сопоставления с образцом, арифметики и так далее
Во-первых, создайте символическую ссылку для соответствия требованиям LSB. Кроме того, для совместимости с x86_64 создайте символическую ссылку, необходимую для правильной работы загрузчика динамической библиотеки:
ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64 ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64/ld-lsb-x86-64.so.3
![[Примечание]](../images/note.png) 
          Приведенная выше команда верна. Команда ln имеет несколько вариантов синтаксиса, поэтому обязательно ознакомьтесь с info coreutils ln и ln(1), прежде чем сообщать об ошибке.
          Некоторые программы, использующие Glibc, применяют несовместимый с
          FHS каталог /var/db для хранения
          своих данных времени выполнения. Установите следующий патч, чтобы
          такие программы хранили свои данные в местах, совместимых с FHS:
        
patch -Np1 -i ../glibc-2.40-fhs-1.patch
В документации к Glibc рекомендуется собирать Glibc в отдельном каталоге:
mkdir -v build cd build
          Убедитесь, что утилиты ldconfig and sln установлены в /usr/sbin:
        
echo "rootsbindir=/usr/sbin" > configparms
Затем подготовьте Glibc к компиляции:
../configure                             \
      --prefix=/usr                      \
      --host=$LFS_TGT                    \
      --build=$(../scripts/config.guess) \
      --enable-kernel=4.19               \
      --with-headers=$LFS/usr/include    \
      --disable-nscd                     \
      libc_cv_slibdir=/usr/lib
        Значение параметров настройки:
--host=$LFS_TGT,
              --build=$(../scripts/config.guess)
            
                Комбинация этих опций указывает на то, что система сборки
                Glibc настраивается на кросс-компиляцию с использованием
                кросс-компоновщика и кросс-компилятора в $LFS/tools.
              
--enable-kernel=4.19
            Этот параметр позволяет Glibc выполнять компиляцию библиотеки с поддержкой ядра 4.19 и более поздних версий. Поддержка более старых ядер не включена.
--with-headers=$LFS/usr/include
            Этот аргумент позволяет скомпилировать библиотеку с заголовочными файлами, недавно установленными в каталоге $LFS/usr/include, таким образом, пакету будет известно, какие функции есть у ядра, чтобы оптимизировать себя.
libc_cv_slibdir=/usr/lib
            Этот аргумент гарантирует, что библиотека будет установлена в /usr/lib вместо стандартного /lib64 на 64-битных машинах.
--disable-nscd
            Параметр отключает сборку демона кэша службы имен, который больше не используется.
На этом этапе может появиться следующее предупреждение:
configure: WARNING: *** These auxiliary programs are missing or *** incompatible versions: msgfmt *** some features will be disabled. *** Check the INSTALL file for required versions.
Отсутствующая или несовместимая программа msgfmt, как правило, безвредна. msgfmt является частью пакета Gettext, который должен предоставлять хост-дистрибутив.
![[Примечание]](../images/note.png) 
          
            Поступали сообщения о том, что этот пакет может не
            компилироваться при «параллельной сборке». Если это произойдет,
            повторно запустите команду make с параметром -j1.
          
Скомпилируйте пакет:
make
Установите пакет:
![[Предупреждение]](../images/warning.png) 
          
            Если переменная LFS настроена
            неправильно, и, несмотря на рекомендации, вы выполняете сборку от
            имени пользователя root,
            следующая команда установит только что собранный Glibc в вашу
            хост-систему, что, скорее всего, сделает её непригодной для
            использования. Поэтому дважды проверьте, правильность настройки
            среды и что вы вошли в систему не под учетной записью
            root, прежде чем запускать
            следующую команду.
          
make DESTDIR=$LFS install
Значение опции make install:
DESTDIR=$LFS
            
                Переменная make DESTDIR
                используется почти всеми пакетами для определения места
                установки пакета. Если она не задана, по умолчанию для
                установки используется корневой каталог (/). Здесь мы указываем, что пакет должен
                быть установлен в $LFS, который станет корневым каталогом в
                Раздел 7.4, «Вход в
                окружение Chroot».
              
Исправьте жестко запрограммированный путь к исполняемому загрузчику в ldd:
sed '/RTLDLIST=/s@/usr@@g' -i $LFS/usr/bin/ldd
![[Внимание]](../images/caution.png) 
          На этом этапе необходимо остановиться и убедиться, что основные функции (компиляция и компоновка) нового кросс-тулчейна работают должным образом. Чтобы выполнить проверку работоспособности, выполните следующие команды:
echo 'int main(){}' | $LFS_TGT-gcc -xc -
readelf -l a.out | grep ld-linux
          Если все работает правильно, ошибок быть не должно и вывод последней команды будет иметь вид:
[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]Если выходные данные отображаются не так, как указано выше, или их вообще нет, значит, что-то сделано неправильно. Разберитесь с проблемой и повторите шаги выше, чтобы исправить ее. Эта проблема должна быть решена, прежде чем вы продолжите.
Как только все будет хорошо, удалите тестовый файл:
rm -v a.out
![[Примечание]](../images/note.png) 
          Сборка пакетов в следующей главе послужит дополнительной проверкой правильности сборки временного кросс-тулчейна. Если какой-либо пакет, особенно Binutils или GCC, не удается собрать, это указывает на то, что что-то пошло не так с установленными ранее Binutils, GCC, или Glibc.
Теперь перекомпилируйте Glibc для m32. Извлеченный исходный код можно использовать повторно, но его необходимо очистить перед установкой версии Glibc m32.
Очистите каталог сборки и удалите артефакты от предыдущей сборки:
make clean find .. -name "*.a" -delete
Сконфигурируйте Glibc для m32 с помощью следующих команд:
CC="$LFS_TGT-gcc -m32" \
CXX="$LFS_TGT-g++ -m32" \
../configure                             \
      --prefix=/usr                      \
      --host=$LFS_TGT32                  \
      --build=$(../scripts/config.guess) \
      --enable-kernel=4.19                \
      --with-headers=$LFS/usr/include    \
      --disable-nscd                     \
      --libdir=/usr/lib32                \
      --libexecdir=/usr/lib32            \
      libc_cv_slibdir=/usr/lib32
        Скомпилируйте пакет:
make
Установите пакет:
make DESTDIR=$PWD/DESTDIR install
cp -a DESTDIR/usr/lib32 $LFS/usr/
install -vm644 DESTDIR/usr/include/gnu/{lib-names,stubs}-32.h \
               $LFS/usr/include/gnu/
ln -svf ../lib32/ld-linux.so.2 $LFS/lib/ld-linux.so.2
        ![[Внимание]](../images/caution.png) 
          На этом этапе необходимо остановиться и убедиться, что основные функции (компиляция и компоновка) нового кросс-тулчейна работают должным образом. Чтобы выполнить проверку работоспособности, выполните следующие команды:
echo 'int main(){}' > dummy.c
$LFS_TGT-gcc -m32 dummy.c
readelf -l a.out | grep '/ld-linux'
          Если все работает правильно, ошибок быть не должно и вывод последней команды будет иметь вид:
[Requesting program interpreter: /lib/ld-linux.so.2]Если выходные данные отображаются не так, как указано выше, или их вообще нет, значит, что-то сделано неправильно. Разберитесь с проблемой и повторите шаги выше, чтобы исправить ее. Эта проблема должна быть решена, прежде чем вы продолжите.
Как только все будет хорошо, удалите тестовый файл:
rm -v dummy.c a.out
Подробная информация об этом пакете находится в Раздел 8.5.4, «Содержимое пакета Glibc.»