Ожидаемое время сборки: 11.8 SBU
|
Glibc является библиотекой C, которая обеспечивает системные вызовы и основные функции, такие как open, malloc, printf и т.д. Библиотека C используется для всех динамически скомпонованых программ.
Устанавливаемые программы: catchsegv, gencat, getconf, getent, glibcbug, iconv, iconvconfig, ldconfig, ldd, lddlibc4, locale, localedef, mtrace, nscd, nscd_nischeck, pcprofiledump, pt_chown, rpcgen, rpcinfo, sln, sprof, tzselect, xtrace, zdump и zic
Устанавливаемые библиотеки: ld.so, libBrokenLocale.[a,so], libSegFault.so, libanl.[a,so], libbsd-compat.a, libc.[a,so], libc_nonshared.a, libcrypt.[a,so], libdl.[a,so], libg.a, libieee.a, libm.[a,so], libmcheck.a, libmemusage.so, libnsl.a, libnss_compat.so, libnss_dns.so, libnss_files.so, libnss_hesiod.so, libnss_nis.so, libnss_nisplus.so, libpcprofile.so, libpthread.[a,so], libresolv.[a,so], librpcsvc.a, librt.[a,so], libthread_db.so и libutil.[a,so]
Glibc зависит от: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Gettext, Grep, Make, Perl, Sed, Texinfo.
Перед началом установки Glibc, вы должны перейти (с помощию команды cd, например) в директорию glibc-2.3.2 и распаковать Glibc-linuxthreads в этой директории, а не там где вы обычно распаковываете все исходники.
Замечание: Мы собираемся запустить тестирование для Glibc в этой главе. Это тестирование тут является менее важным, чем тестирование Glibc в Главе 6.
Этот пакет известен своим нестабильным поведением при компиляции с измененными опциями оптимизации (включая опции -march и -mcpu). Glibc рекомендуется компилировать с настройками по умолчанию. Следовательно, если вы задали переменные такие как CFLAGS или CXXFLAGS, изменяющие уровень оптимизации по умолчанию, рекомендуется убрать их при сборке пакета Glibc. Изменяя оптимизации для glibc, вы действуете на свой страх и риск.
Хотя это и безвредное сообщение, но при установке Glibc жалуется на отсутствие /tools/etc/ld.so.conf. Исправим это с помощью команд:
mkdir /tools/etc
|
Также, Glibc имеет некоторые тонкие проблемы при компиляции с GCC 3.3.1. Применим следующий патч для их исправления:
patch -Np1 -i ../glibc-2.3.2-sscanf-1.patch
|
Документация по Glibc рекомендует собирать Glibc вне директории с исходниками, в отдельной директории для сборки:
mkdir ../glibc-build
|
Далее, подготовим Glibc к компиляции:
../glibc-2.3.2/configure --prefix=/tools \
|
Описание опций конфигурации:
--disable-profile: Это отключает сборку библиотек с использованием профильной информации. Опустите эту опцию, если собираетесь испольховать профили.
--enable-add-ons: Это подключает любые дополнения при остановке Glibc, в нашем случае Linuxthreads.
--with-binutils=/tools/bin and --with-headers=/tools/include: Строго говоря, эти опции необязательны. Но они позволяют нам удостовериться, что будут использованы нужные заголовки ядра и программы Binutils для сборки Glibc.
--without-gd: Этот переключатель позволит нам быть уверенными, что не соберется программа memusagestat, которая будет пытаться подключить библиотеки из основной системы (libgd, libpng, libz и некоторые другие).
На этом шаге вы можете увидеть следующее предупреждение:
configure: WARNING:
*** These auxiliary programs are missing or incompatible versions: msgfmt
*** some features will be disabled.
*** Check the INSTALL file for required versions.
Отсутствующая или несовместимая программа msgfmt безвредна, но может привести к определенным проблемам при тестировании.
Скомпилируем пакет:
make
|
Запустим тестирование:
make check
|
Тестирование Glibc сильно зависит от некоторых функций вашей основной системы, в частности ядра. Также, некоторые тесты в этой главе могут взаимодействовать с окружением вашей системы. Само собой, мы не должны получить таких проблем при запуске тестирования в Главе 6. В общем, тестирование Glibc должно пройти удачно. Тем не менее. по причинам, перечисленным ниже, тестирование может закончиться неудачно. Вот список наиболее вероятных причин этого:
Тест math иногда не проходит при его запуске на системе с процессорами, отличными от новых Intel-совместимых или оригинальных AMD. Также это может произойти при некоторых установках оптимизации.
Тест gettext иногда не проходит из-за зависимостей от основной системы. Точная причина пока не ясна.
Тест atime иногда не проходит когда раздел LFS монтирован с опцией noatime или из-за других причин, связанных с файловой системой.
Тест shm может не пройти, если в ващей системе запущена файловая система devfs, но нет файловой системы tmpfs, монтированой на /dev/shm, если отключена поддержка tmpfs в ядре.
При запуске на старом и медленном оборудовании некоторые тесты могут не пройти по тайм-ауту.
В общем, вам не стоит беспокоится, естли вы увидите, что тестирование Glibc не прошло. Glibc в Главе 6 будет последним из устанавливаемых и его тестирование будет более важным. Но имейте в виду. что в Главе 6 некоторые тесты могут также не пройти -- тест math, к примеру. Когда вы получите сообщение о непрохождении теста, запомните его, а затем продолжите тестирование дальше . Это можно сделать, так как скрипт тестирования запоминает пройденые тесты для возможности его продолжения после выхода из-за ошибки. Вы можете использовать эту возможность "запуска-остановки" автоматически с помощью команды make -k check. Но если вы так сделаете, проверьте логи тестирования и посмотрите общее количество и причины проваленых тестов.
Теперь установим пакет:
make install
|
Разные страны и культуры имеют различные соглашения для коммуникаций. Эти соглашения состоят как из очень простых, таких как форматы даты и времени, так и из более сложных, таких как разговорный язык. "Интернационализация" программ GNU работает с помощью локалей (locales). Так что установим локали для Glibc:
make localedata/install-locales
|
Альтернативой запуску предыдущей команды является установка только определенных локалей, тех которые вам нужны. Это может быть достигнуто использованием команды localedef. Информацию об использовании этой команды можно получить из файла INSTALL в исходниках glibc-2.3.2. Тем не менее, список локалей может быть существенным для некоторых тестов, в частности, теста libstdc++ из GCC. Следующие команды, используемые вместо вышеописаной install-locales, устаноят минимальный набор локалей для успешного завершения тестирований:
mkdir -p /tools/lib/locale
|