Linux From Scratch. Версия 6.0

Глава 5. Построение временной системы

5.8. Glibc-2.3.4-20040701

Glibc является библиотекой C, которая обеспечивает системные вызовы и основные функции, такие как open, malloc, printf и т. д. Библиотека C используется для всех динамически скомпонованных программ.

Расчетное время сборки 11.8 SBU

Требуемое место на диске 800 MB

Glibc зависит от установки: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Gettext, Grep, Make, Perl, Sed и Texinfo.

5.8.1. Инсталлируем Glibc

Этот пакет известен своим нестабильным поведением при компиляции с измененными опциями оптимизации (включая опции -march и -mcpu). Если Вы задали переменные окружения, такие как CFLAGS и CXXFLAGS, рекомендуется убрать их при сборке Glibc. Изменяя флаги оптимизации для glibc, Вы действуете на свой страх и риск.

Документация по Glibc рекомендует собирать Glibc вне каталога с исходниками, в отдельном каталоге для сборки:

mkdir ../glibc-build
cd ../glibc-build

Далее, подготовим Glibc к компиляции:

../glibc-2.3.4-20040701/configure --prefix=/tools \
                       --disable-profile --enable-add-ons=nptl --with-tls \
                       --with-__thread --enable-kernel=2.6.0 \
                       --with-binutils=/tools/bin --without-gd --without-cvs \
                       --with-headers=/tools/glibc-kernheaders

Описание опций конфигурации:

--disable-profile

Отключает сборку библиотек с использованием профильной информации. Опустите эту опцию, если собираетесь использовать профили.

--enable-add-ons=nptl

Говорит Glibc использовать дополнение NPTL к библиотеке.

--with-tls

Говорит Glibc включить поддержку для Thread-Local Storage (TLS). Это необходимо для нормальной работы NPTL.

--with-__thread

Эта опция говорит Glibc включить поддержку нитей. Это необходимо для правильной сборки TLS.

--enable-kernel=2.6.0

Эта опция говорит Glibc компилировать библиотеку с поддержкой ядер 2.6.x.

--with-binutils=/tools/bin

Эта опция не обязательна, но она позволяет удостовериться, что будут использована нужная программа Binutils для сборки Glibc.

--without-gd

Эта опция запрещает сборку программы memusagestat, которая пытается связаться с библиотеками основной системы (libgd, libpng, libz, и т. д.).

--without-cvs

Эта опция запрещает использование файлов Makefile из тестовых CVS-версий, когда используется CVS. Пока эта команда не обязательна, но она рекомендуется.

--with-headers=/tools/glibc-kernheaders

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

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


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, который используется из дистрибутива основной системы. Если msgfmt имеется, но считается несовместимой, обновите пакет Gettext из основной системы или продолжайте без него.

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

make

Компиляция проведена. Как было сказано ранее, запуск теста для временной сборки в этой части проводить не обязательно. В любом случае, для запуска теста Glibc используйте следующую команду:

make check

Для обсуждения особо важных ошибок тестирования, смотрите раздел 6.11. “Glibc-2.3.4-20040701” .

В этой части некоторые тесты могут быть неспособны дать положительный результат при использовании имеющихся приложений или переменных окружения базовой системы. Ошибки тестов Glibc в этой части обычно не должны беспокоить. Glibc, проинсталированные в главе 6, будут полностью готовы к использованию. Но имейте в виду, что при прохождении тестов (даже в главе 6), некоторые ошибки все еще могут появляться, например, в тесте math.

Когда Вы получите сообщение о непрохождении теста, запомните его, а затем продолжите тестирование дальше, опять выполнив команду make check. Скрипт тестирования запоминает пройденные тесты для возможности его продолжения после выхода из-за ошибки. Вы можете использовать эту возможность запуска и остановки автоматически с помощью команды make -k check. Если Вы так сделаете, проверьте протокол тестирования и посмотрите общее количество и причины проваленных тестов.

Этап инсталляции Glibc будет иметь предупреждение в конце об отсутствии /tools/etc/ld.so.conf. Упредим это сообщение:

mkdir /tools/etc
touch /tools/etc/ld.so.conf

Теперь устанавливаем пакет:

make install

Разные страны и культуры имеют различные соглашения для коммуникаций. Эти соглашения состоят как из очень простых, таких как форматы даты и времени, так и из более сложных, таких как разговорный язык. “Интернационализация” программ GNU работает с помощью локалей (locales).

[Note]

Замечание

Если тест не был запущен в этой части (как в рекомендации), нет необходимости в инсталляции локалей сейчас. Необходимые локали будут установлены в следующей части.

Для установки Glibc-локалей в любом случае используйте следующую команду:

make localedata/install-locales

Альтернативой запуску предыдущей команды для экономии времени является установка только определенных локалей, тех которые нужны. Это может быть достигнуто использованием команды localedef . Информацию об использовании этой команды можно получить из файла INSTALL в исходниках Glibc. Тем не менее, список локалей может быть существенным для некоторых тестов, в частности, теста libstdc++ из GCC. Следующие команды, используемые вместо вышеописаной install-locales, установят минимальный набор локалей для успешного завершения тестирований:

mkdir -p /tools/lib/locale
localedef -i de_DE -f ISO-8859-1 de_DE
localedef -i de_DE@euro -f ISO-8859-15 de_DE@euro
localedef -i en_HK -f ISO-8859-1 en_HK
localedef -i en_PH -f ISO-8859-1 en_PH
localedef -i en_US -f ISO-8859-1 en_US
localedef -i es_MX -f ISO-8859-1 es_MX
localedef -i fa_IR -f UTF-8 fa_IR
localedef -i fr_FR -f ISO-8859-1 fr_FR
localedef -i fr_FR@euro -f ISO-8859-15 fr_FR@euro
localedef -i it_IT -f ISO-8859-1 it_IT
localedef -i ja_JP -f EUC-JP ja_JP

Детальная информация о пакете находится в разделе 6.11.4. “Описание Glibc”.