5.5. Glibc-2.37

Пакет Glibc содержит основную библиотеку C. Эта библиотека предоставляет основные процедуры для выделения памяти, поиска в каталогах, открытия и закрытия файлов, чтения и записи файлов, обработки строк, сопоставления с образцом, арифметики и так далее

Приблизительное время сборки: 1.5 SBU
Требуемое дисковое пространство: 822 MB

5.5.1. Установка пакета Glibc

Во-первых, создайте символическую ссылку для соответствия требованиям LSB. Кроме того, для совместимости с x86_64 создайте символическую ссылку, необходимую для правильной работы загрузчика динамической библиотеки:

case $(uname -m) in
    i?86)   ln -sfv ld-linux.so.2 $LFS/lib/ld-lsb.so.3
    ;;
    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
    ;;
esac
[Примечание]

Примечание

Приведенная выше команда верна. Команда ln имеет несколько вариантов синтаксиса, поэтому обязательно ознакомьтесь с info coreutils ln и ln(1), прежде чем сообщать об ошибке.

Некоторые программы, использующие Glibc, применяют несовместимый с FHS каталог /var/db для хранения своих данных времени выполнения. Установите следующий патч, чтобы такие программы хранили свои данные в местах, совместимых с FHS:

patch -Np1 -i ../glibc-2.37-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=3.2                \
      --with-headers=$LFS/usr/include    \
      libc_cv_slibdir=/usr/lib

Значение параметров настройки:

--host=$LFS_TGT, --build=$(../scripts/config.guess)

Комбинация этих опций указывает на то, что система сборки Glibc настраивается на кросс-компиляцию с использованием кросс-компоновщика и кросс-компилятора в $LFS/tools.

--enable-kernel=3.2

Этот параметр позволяет Glibc выполнять компиляцию библиотеки с поддержкой ядра 3.2 и более поздних версий. Поддержка более старых ядер не включена.

--with-headers=$LFS/usr/include

Этот аргумент позволяет скомпилировать библиотеку с заголовочными файлами, недавно установленными в каталоге $LFS/usr/include, таким образом, пакету будет известно, какие функции есть у ядра, чтобы оптимизировать себя.

libc_cv_slibdir=/usr/lib

Этот аргумент гарантирует, что библиотека будет установлена в /usr/lib вместо стандартного /lib64 на 64-битных машинах.

На этом этапе может появиться следующее предупреждение:

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, который должен предоставлять хост-дистрибутив.

[Примечание]

Примечание

Поступали сообщения о том, что этот пакет может не компилироваться при "параллельной сборке". Если это произойдет, повторно запустите команду make с параметром "-j1".

Скомпилируйте пакет:

make

Установите пакет:

[Предупреждение]

Предупреждение

Если переменная 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
[Внимание]

Внимание

На этом этапе необходимо остановиться и убедиться, что основные функции (компиляция и компоновка) нового кросс-тулчейна работают должным образом. Чтобы выполнить проверку работоспособности, выполните следующие команды:

echo 'int main(){}' | $LFS_TGT-gcc -xc -
readelf -l a.out | grep ld-linux

Если все работает правильно, ошибок быть не должно, и вывод последней команды будет иметь вид:

[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]

Обратите внимание, что для 32-разрядных машин имя интерпретатора будет /lib/ld-linux.so.2.

Если выходные данные отображаются не так, как указано выше, или их вообще нет, значит, что-то сделано неправильно. Разберитесь с проблемой и повторите шаги выше, чтобы исправить ее. Эта проблема должна быть решена, прежде чем вы продолжите.

Как только все будет хорошо, удалите тестовый файл:

rm -v a.out
[Примечание]

Примечание

Сборка пакетов в следующей главе послужит дополнительной проверкой правильности сборки временного кросс-тулчейна. Если какой-либо пакет, особенно Binutils или GCC, не удается собрать, это указывает на то, что что-то пошло не так с установленными ранее Binutils, GCC, или Glibc.

Теперь, когда наш кросс-тулчейн собран, завершите установку заголовочного файла limits.h. Для этого запустите утилиту, предоставляемую разработчиками GCC:

$LFS/tools/libexec/gcc/$LFS_TGT/12.2.0/install-tools/mkheaders

Подробная информация об этом пакете находится в Раздел 8.5.3, «Содержимое пакета Glibc.»