%general-entities; ]> glibc &glibc-version;
&glibc-url;
Glibc-&glibc-version; Glibc tools <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../chapter08/glibc.xml" xpointer="xpointer(/sect1/sect2[1]/para[1])"/> <segmentedlist> <segtitle>&buildtime;</segtitle> <segtitle>&diskspace;</segtitle> <seglistitem> <seg>&glibc-tmp-sbu;</seg> <seg>&glibc-tmp-du;</seg> </seglistitem> </segmentedlist> </sect2> <sect2 role="installation"> <title>Установка пакета 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-&glibc-version;-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=&min-kernel; \ --with-headers=$LFS/usr/include \ --disable-nscd \ libc_cv_slibdir=/usr/lib Значение параметров настройки: --host=$LFS_TGT, --build=$(../scripts/config.guess) Комбинация этих опций указывает на то, что система сборки Glibc настраивается на кросс-компиляцию с использованием кросс-компоновщика и кросс-компилятора в $LFS/tools. --enable-kernel=&min-kernel; Этот параметр позволяет Glibc выполнять компиляцию библиотеки с поддержкой ядра &min-kernel; и более поздних версий. Поддержка более старых ядер не включена. --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, который должен предоставлять хост-дистрибутив. Поступали сообщения о том, что этот пакет может не компилироваться при "параллельной сборке". Если это произойдет, повторно запустите команду make с параметром "-j1". Скомпилируйте пакет: make Установите пакет: Если переменная LFS настроена неправильно, и, несмотря на рекомендации, вы выполняете сборку от имени пользователя root, следующая команда установит только что собранный Glibc в вашу хост-систему, что, скорее всего, сделает её непригодной для использования. Поэтому дважды проверьте, правильность настройки среды и что вы вошли в систему не под учетной записью &root;, прежде чем запускать следующую команду. make DESTDIR=$LFS install Значение опции <command>make install</command>: DESTDIR=$LFS Переменная make DESTDIR используется почти всеми пакетами для определения места установки пакета. Если она не задана, по умолчанию для установки используется корневой каталог (/). Здесь мы указываем, что пакет должен быть установлен в $LFS, который станет корневым каталогом в . Исправьте жестко запрограммированный путь к исполняемому загрузчику в 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.
<para>Подробная информация об этом пакете находится в <xref linkend="contents-glibc" role="."/></para> </sect2> </sect1>