%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 -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 Приведенная выше команда верна. Команда 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 ../configure \ --prefix=/usr \ --host=$LFS_TGT \ --build=$(../scripts/config.guess) \ --enable-kernel=&min-kernel; \ --with-headers=$LFS/usr/include \ --disable-nscd \ --enable-multi-arch \ 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 с параметром . Скомпилируйте пакет: 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.
Сборка Glibc — 32-битная версия Теперь перекомпилируйте 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=&min-kernel; \ --with-headers=$LFS/usr/include \ --enable-multi-arch \ --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 На этом этапе необходимо остановиться и убедиться, что основные функции (компиляция и компоновка) нового кросс-тулчейна работают должным образом. Чтобы выполнить проверку работоспособности, выполните следующие команды: 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 Сборка Glibc - с поддержкой x32 ABI Теперь перекомпилируйте Glibc для mx32. Извлеченный исходный код можно использовать повторно, но его необходимо очистить перед установкой версии Glibc mx32. Очистите каталог сборки и удалите артефакты от предыдущей сборки: make clean find .. -name "*.a" -delete Сконфигурируйте Glibc для mx32 с помощью следующих команд: CC="$LFS_TGT-gcc -mx32" \ CXX="$LFS_TGT-g++ -mx32" \ ../configure \ --prefix=/usr \ --host=$LFS_TGTX32 \ --build=$(../scripts/config.guess) \ --enable-kernel=&min-kernel; \ --with-headers=$LFS/usr/include \ --enable-multi-arch \ --libdir=/usr/libx32 \ --libexecdir=/usr/libx32 \ libc_cv_slibdir=/usr/libx32 Скомпилируйте пакет: make Установите пакет: make DESTDIR=$PWD/DESTDIR install cp -a DESTDIR/usr/libx32 $LFS/usr/ install -vm644 DESTDIR/usr/include/gnu/{lib-names,stubs}-x32.h \ $LFS/usr/include/gnu/ ln -svf ../libx32/ld-linux-x32.so.2 $LFS/lib/ld-linux-x32.so.2 На этом этапе необходимо остановиться и убедиться, что основные функции (компиляция и компоновка) нового кросс-тулчейна работают должным образом. Чтобы выполнить проверку работоспособности, выполните следующие команды: echo 'int main(){}' > dummy.c $LFS_TGT-gcc -mx32 dummy.c readelf -l a.out | grep '/ld-linux-x32' Если все работает правильно, ошибок быть не должно и вывод последней команды будет иметь вид: [Requesting program interpreter: /libx32/ld-linux-x32.so.2] Если выходные данные отображаются не так, как указано выше, или их вообще нет, значит, что-то сделано неправильно. Разберитесь с проблемой и повторите шаги выше, чтобы исправить ее. Эта проблема должна быть решена, прежде чем вы продолжите. Как только все будет хорошо, удалите тестовый файл: rm -v dummy.c a.out <para>Подробная информация об этом пакете находится в <xref linkend="contents-glibc" role="."/></para> </sect2> </sect1>