Как установить glibc ubuntu

Обновлено: 06.07.2024

Ошибка базы данных: Table 'a111530_forumnew.rlf1_users' doesn't exist

6.9. Пакет Glibc-2.13

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

Приблизительное время сборки: 16,9 SBU

Требуемое дисковое пространство: 637 MB

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

Замечание

Для некоторых пакетов, не входящих в состав LFS, предлагается устанавливать библиотеку GNU libiconv с тем, чтобы можно преобразовывать данные из одной кодировки в другую. На главной странице проекта ( http://www.gnu.org/software/libiconv/ ) указывается: "Данная библиотека предоставляет собой реализацию iconv() , предназначенную для использования в системах, в которых такой библиотеки нет, либо в которых такая библиотека не может осуществлять преобразование в кодировку и из кодировки Unicode". В Glibc предлагается реализация iconv() и можно преобразовывать данные вв кодировку и из кодировки Unicode, поэтому в системе LFS библиотека libiconv не требуется.

Система сборки пакета Glibc является самодостаточной и пакет будет прекрасно установлен даже в случае, если файл спецификаций компилятора и компоновщик по-прежнему указывают на директорий /tools . Спецификации и компоновщик не следует менять до установки пакета Glibc, поскольку не пройдут тесты Glibc autoconf и в результате не удастся получить чистую сборку пакета.

Когда запускается команда make install, скрипт, который называется test-installation.pl , выполнит небольшой тест проверки чистоты установки для нашей только что установленной библиотеки Glibc. Однако, поскольку наш набор инструментальных средств по-прежнему указывает на директорий test-installation.pl , этот тест будет выполняться над не той библиотекой Glibc. Мы можем заставить скрипт проверять библиотеку Glibc, которую мы только что установили, следующим образом:

В скрипте ldd, исполняемом в командной оболочке, используется синтаксис, специфичный для Bash. В случае, если установлен другой интерпретатор, например, /bin/sh, измените программу интерпретатора, используемого по умолчанию, на /bin/bash так, как это писано в главе Shells (Командные оболочки) в книге BLFS:

Исправьте ошибку, которая не позволяется делать сборку пакета Glibc с помощью компилятора GCC-4.5.2:

Исправьте ошибку разбалансировки стека, которая возникает при некоторых обстоятельствах:

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

Как и в главе 5, для машин с архитектурой x86 добавьте в переменную CFLAGS флаги, необходимые для компилятора. Здесь также для компилятора gcc указываются режимы оптимизации библиотеки, повышающие скорость компиляции (-pipe) и увеличивающие производительность пакета (-O3).

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

Пояснение новых конфигурационных параметров:

Этот параметр изменяет месторасположение команды pt_chown с используемого по умолчанию директория /usr/libexec на директорий /usr/lib/glibc .

Важно

В этом разделе выполнение набора тестов для Glibc считается важным. Не пропускайте его ни при каких обстоятельствах.

Перед запуском тестов, скопируйте файл из дерева исходных кодов в дерево нашей сборки с тем, чтобы предотвратить ряд неудачных запусков тестов, затем проверьте результаты:

Вы, вероятно, увидите ожидаемый (игнорируемый) отказ теста posix/annexc. Кроме того, тестовый набор для Glibc в некоторой степени зависит от хост системы. Ниже приведен список наиболее часто встречающихся вопросов:

  • Иногда тесты nptl/tst-clock2, nptl/tst-attr3 и rt/tst-cpuclock2 не проходят. Причина не совсем понятна, но есть признаки того, что проблемы с тестами могут быть вызваны малым временем исполнения.
  • Математические тесты иногда также не проходят, когда они выполняются в системах, где процессор не является сравнительно новым фирменным Intel или соответствующим подлинным процессором AMD.
  • Если вы смонтировали раздел LFS с параметром noatime , тест atime проходить не будет. Как уже упоминалось в разделе 2.4 "Монтирование нового раздела", не используйте параметр noatime , когда собираете систему LFS.
  • Будучи запущенными на старом или и медленном оборудовании или в системе, которая находится под нагрузкой, некоторые тесты могут не проходить из-за того, что превышены таймауты. Измените команду make check и установите такое значение для TIMEOUTFACTOR, которое поможет устранить эти ошибки (например, TIMEOUTFACTOR=16 make -k check).

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

Отдельные локали можно установить с помощью программы localedef. Например, первая команда localedef, приведенная ниже, объединяет определение локали для независимого набора данных /usr/share/i18n/locales/cs_CZ с определением таблицы отображения символов /usr/share/i18n/charmaps/UTF-8.gz и добавляет результат в файл /usr/lib/locale/locale-archive . Следующие инструкции установят минимальный набор локалей, необходимых для выполнения оптимального набора тестов:

Дополнительно задайте локаль для своей страны, языка и набора символов.

Либо сразу установите все локали, перечисленные в файле glibc-2.13/localedata/SUPPORTED (в нем находятся все локали, перечисленные выше, и многие другие), с помощью одной следующей локали:

Затем с помощью команды localedef создайте и установите локали, которые не указаны в файле glibc-2.13/localedata/SUPPORTED , в том маловероятном случае, когда таковые вам потребуются.

6.9.2. Конфигурирование пакета Glibc

Необходимо создать файл /etc/nsswitch.conf , поскольку хотя в пакете Glibc есть настройки, используемые по умолчанию в случае, когда этот файл отсутствует или поврежден, настройки Glibc по умолчанию не срабатывают в сетевой среде. Также необходимо сконфигурировать часовой пояс.

Создайте новый файл /etc/nsswitch.conf с помощью следующей команды:

Для того, чтобы определить ваш часовой пояс, запустите следующий скрипт:

Затем создайте файл /etc/localtime с помощью следующей команды:

Замените <xxx> на имя выбранного часового пояса (например, Canada/Eastern).

Пояснение параметра команды cp:

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

6.9.3. Конфигурирование динамического загрузчика

По умолчанию, динамический загрузчик ( /lib/ld-linux.so.2 ) ищет динамические библиотеки, которые требуются программам, когда они работают, в директориях /lib и /usr/lib . Однако, если есть библиотеки, которые расположены в директориях, отличающихся от /lib и /usr/lib , то их следует добавить к файлу /etc/ld.so.conf с тем, чтобы динамический загрузчик мог их найти. Два директория, о которых, как правило, известно, что в них находятся дополнительные библиотеки, это /usr/local/lib и /opt/lib , поэтому добавьте эти директории в путь поиска, используемом динамическим загрузчиком.

Создайте новый файл /etc/ld.so.conf , выполнив следующую команду:

6.9.4. Описание пакета Glibc

Установленные программы: catchsegv, gencat, getconf, getent, iconv, iconvconfig, ldconfig, ldd, lddlibc4, locale, localedef, mtrace, nscd, pcprofiledump, pt_chown, rpcgen, rpcinfo, sln, sprof, tzselect, xtrace, zdump и zic

Установленные библиотеки: ld.so, libBrokenLocale., libSegFault.so, libanl., libbsd-compat.a, libc., libc_nonshared.a, libcidn.so, libcrypt., libdl., libg.a, libieee.a, libm., libmcheck.a, libmemusage.so, libnsl., libnss_compat.so, libnss_dns.so, libnss_files.so, libnss_hesiod.so, libnss_nis.so, libnss_nisplus.so, libpcprofile.so, libpthread., libpthread_nonshared.a, libresolv., librpcsvc.a, librt., libthread_db.so и libutil.

Установленные директории: /usr/include/arpa, /usr/include/bits, /usr/include/gnu, /usr/include/net, /usr/include/netash, /usr/include/netatalk, /usr/include/netax25, /usr/include/neteconet, /usr/include/netinet, /usr/include/netipx, /usr/include/netiucv, /usr/include/netpacket, /usr/include/netrom, /usr/include/netrose, /usr/include/nfs, /usr/include/protocols, /usr/include/rpc, /usr/include/rpcsvc, /usr/include/sys, /usr/lib/gconv, /usr/lib/glibc, /usr/lib/locale, /usr/share/i18n, /usr/share/zoneinfo

Краткое описание

Может использоваться для трассировки стека, когда программа завершается из-за ошибки сегментации

Для определенных системных переменных изображаются системные конфигурационные значения.

Получение записей из административной базы данных

Выполняет преобразование набора символов

iconvconfig

Создает конфигурационные файлы для быстрой загрузки модуля iconv

Конфигурирование привязки времени исполнения для динамического компоновщика

Облегчает доступ ldd к объектным файлам

Выдает различную информацию о текущей локали

Компилирует спецификации, определяющие локали

Читает и интерпретирует файл трассировки памяти; выдает обобщенный результат в формате, удобном для чтения

Демон, который обеспечивает кеширование наиболее общих запросов к службе имен

pcprofiledump

Выдает в дамп информацию, генерируемую при профилировании ПК

Программа-хелпер для grantpt, которая устанавливает владельца, группу и права доступа для подчиненного псевдотерминала

Генерирует код С для реализации протокола удаленного вызова процедур Remote Procedure Call (RPC)

Осуществляет вызов RPC на сервер RPC

Статически скомпонованная программа ln

Чтение и изображение данных профилирования совместно используемого объекта

Задает пользователю вопросы о его месторасположении и выдает описание соответствующего часового пояса

Трассирует исполнение программы путем печати функций, исполняемых в текущий момент

Выдает дамп часового пояса

Компилятор часового пояса

Программа-хелпер, используемая при выполнении совместно используемых библиотек

Используется внутри Glibc для того, чтобы заставить работать определенные программы (например, некоторые приложения Motif). Дополнительную информацию смотрите в комментариях в файле glibc-2.13/locale/broken_cur_max.c

Обработчик сигналов об ошибках сегментации, используемый в catchsegv

Библиотека асинхроннного поиска имен

Обеспечивает мобильность, необходимую для того, чтобы в Linux запускать определенные программы Berkeley Software Distribution (BSD)

Главная библиотека С

Используется внутри Glibc для обработки интернационализированных доменных имен в функции getaddrinfo()

Библиотека интерфейса динамической компоновки

Фиктивная библиотека, в которой нет функций. Ранее была библиотека времени выполнения g++

Компоновка с этим модулем заставляет использовать правила обработки ошибок так, как это определено согласно Institute of Electrical and Electronic Engineers — IEEE (Институт инженеров электротехники и электроники). По умолчанию используется обработка ошибок POSIX.1

При компоновке с этим модулем осуществляется контроль выделения памяти

Используется в memusage для помощи в сборе информации об использовании программой памяти

Библиотека сетевых служб

Библиотеки смены службы имен (Name Service Switch), в которых находятся функции для работы с именами хостов, именами пользователей, именами групп, алиасами, сервисами, протоколами и так далее.

Содержит функции профилирования, используемые для отслеживания времени, потраченного процессором в конкретных строках исходного кода

Библиотека потоков POSIX

Содержит функции создания, пересылки и интерпретации пакетов, используемых на серверах доменных имен в сети интернет

Содержит функции, реализующие различные службы RPC

Содержит функции, реализующие большую часть интерфейсов, определяемых в POSIX.1b Realtime Extension

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

Содержит код "стандартных" функций, используемых во многих различных утилитах Unix

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

Все, без исключения, программы используют библиотеки. Даже если это ваша программа и у нее нет своих библиотек, она использует стандартную библиотеку языка программирования С.

В этой статье мы подробно рассмотрим что такое библиотеки Ubuntu, как их устанавливать, где брать и что делать если библиотека установлена, а программа говорит что ее нет. Мы не будем трогать создание библиотек, это совсем не наша тема. Как обычно, начнем с теории.

Что такое библиотеки

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

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

Не нужно думать что библиотеки есть только в Linux, в Windows они тоже есть, только имеют другой формат и расширение dll. В Linux же все библиотеки находятся в папах /lib/, /usr/lib, /usr/local/lib или для 64 битных систем также появляется папка lib64 во всех этих подкаталогах, для библиотек специфичных для этой архитектуры. Библиотека имеет расширение .so и ее название начинается со слова lib. Например, libfuse.so, libc.so.

Дальше, после расширения файла .so идет номер версии библиотеки. Номер версии меняется всякий раз, когда разработчики вносят в нее изменения ломающие совместимость со всеми рассчитанными на нее программами. В таком случае в системе будут уже две библиотеки и каждая программа будет использовать правильную версию. Например, glibc.so.6 и glibc.so.5.

Если интересно можно даже посмотреть какие библиотеки и каких версий, использует та или иная программа, например:

linux-vdso.so.1 (0x00007ffd99167000)
libmount.so.1 => /usr/lib64/libmount.so.1 (0x00007f0f6beb0000)
libc.so.6 => /lib64/libc.so.6 (0x00007f0f6bb08000)
libblkid.so.1 => /usr/lib64/libblkid.so.1 (0x00007f0f6b8c8000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f0f6b6a4000)
/lib64/ld-linux-x86-64.so.2 (0x000055aca8227000)
libuuid.so.1 => /usr/lib64/libuuid.so.1 (0x00007f0f6b49f000)
libpcre.so.1 => /usr/lib64/libpcre.so.1 (0x00007f0f6b238000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f0f6b034000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f0f6ae17000)

Также эта информация может быть полезна при создании портативных версий программ. А теперь давайте рассмотрим как устанавливаются библиотеки в Ubuntu.

Установка библиотек в Ubuntu

Обычно, если вы используете менеджер пакетов вашего дистрибутива для установки новых программ, то библиотеки устанавливаются автоматически. Но если вы хотите собрать программу из исходников или запустить 32 битную программу на 64 битной системе могут начаться проблемы. Например, при запуске или компиляции программы вы получаете ошибку:

error while loading shared libraries: xxxx.so.0
cannot open shared object file no such file or directory

Обычно, в Ubuntu имена пакетов библиотек соответствуют имени нужной библиотеки. Поэтому чтобы определить точное имя в большинстве случаев достаточно воспользоваться поиском по базе пакетов:

apt search libfuse

library

Как видите, найдено два варианта библиотеки, libfuse2 и libfuse-dev.

Если библиотека нужна обычной программе и ее не нужно собирать из исходников, то будет достаточно установить библиотеку ubuntu без префикса dev. Например:

sudo apt install libfuse2

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

sudo apt install libfuse-dev

Много проблем может вызвать ситуация, когда вам нужно запустить 32 битную программу в 64 битной системе. Например, если вы установили 64 битную версию библиотеки, а программа все равно говорит о том, что не может ее найти, возможно это 32 битная программа и ей необходима именно 32 библиотека. Если программа не устанавливается с помощью пакетного менеджера, вам тоже придется устанавливать библиотеки вручную.

Посмотреть разрядность бинарника можно с помощью утилиты file:

library3

На скриншоте показаны два варианта вывода программы, для 32 бит, в нашем случае Skype и для 64 - mount.

Для того чтобы установить библиотеку Ubuntu с архитектурой i386 сначала необходимо добавить поддержку архитектуры i386 в dpkg:

sudo dpkg --add-architecture i386

Затем обновляем наши репозитории:

sudo apt update

А во время установки нужной вам библиотеки теперь необходимо указать архитектуру через двоеточие после имени пакета:

sudo apt install libfuse-dev:i386

library1

Если вы уверенны, что библиотека установлена, но программа все равно говорит, что такой библиотеки нет, то возможно, ей просто нужна другая версия библиотеки. Например, в системе есть libudev.so.0, а программе нужна libudev.so.0.1. Такое случается, если вы попытаетесь установить пакет для другого дистрибутива, особенно в Red Hat системах. Если в репозиториях нет нужной версии библиотеки, то скорее всего, они одинаковы, и можно просто создать символическую ссылку:

ln -s /lib/libudev.so.0 /lib/libudev.so.0.1

Затем программа найдет нужную библиотеку.

Управление библиотеками в Linux

Установка библиотек ubuntu уже рассмотрена, но хотелось бы упомянуть еще пару моментов. Как я сказал, библиотеки ubuntu размещаются в определенных каталогах, но расположение библиотек можно настроить.

Перед тем как библиотека будет подключена к программе, ее должна найти в системе специальная программа - менеджер библиотек. Он берет адреса библиотек из файла /etc/ld.cache, а этот файл формируется утилитой ldconfig, на основе файлов конфигурации /etc/ld.so.conf.

В этом файле перечислены все пути к библиотекам. Если вы хотите добавить свою папку для библиотек просто добавьте ее в этот файл:

Затем обновите кэш просто выполнив:

Теперь ваша библиотека может быть загружена программой, например, вы можете добавить путь /opt/lib или даже /home/user/lib. И система будет нормально грузить оттуда библиотеки.

Посмотреть какие библиотеки находятся в кеше ld.cache можно командой:

Также мы можем проверить находится ли там определенная библиотека:

ldconfig -p | grep libjpeg

library2

Еще один способ указать программе где нужно искать библиотеки - это переменная LD_LIBRARY_PATH. Например:

Теперь программы, запускаемые в этом терминале, кроме стандартных путей поиска библиотек, будут использовать и указанную папку.

Выводы

Вот и все. Теперь вы знаете как работают библиотеки Ubuntu, как выполняется установка библиотек Ubuntu и делать так, чтобы программа видела нужную ей библиотеку. У новичков это может вызвать очень много головной боли, но теперь вы знаете что делать и избежите многих ошибок. Если у вас остались вопросы, пишите в комментариях!

Перед установкой пакета примените патч. Удостоверьтесь, что патч и пакет распакованы перед инсталляцией.

Перед выполнением инсталляционных инструкций войдите в каталог glibc-2.2.5 и распакуйте архив glibc-linuxthreads в каталоге glibc-2.2.5, а не в /usr/src.

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

Также не стоит запускать скрипт configure с опцией --enable-kernel. Это может вызвать ошибки сегментации при ссылке на него пакетов вроде fileutils, make и tar.

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

Для инсталляции Glibc выполните:

Вместо выполнения make localedata/install-locales можно установить только те локали, которые вам необходимы с помощью команды localedef. Более подробную информацию можно найти в файле INSTALL в директории glibc-2.2.5. Не забудьте создать директорию /usr/lib/local, т.к. localedef предполагает ее наличие.

На данном этапе мы не будем инсталлировать страницы руководства потоков (The Linux Threads man pages), т.к. они требуют функционирующего пакета Perl. Мы вернемся к их инсталляции после установки Perl.

Во время стадии configure на экран будет выведено следующее предупреждение:

Отсутствие файла msgfmt (из пакета gettext, который мы установим позже в данной главе) не вызовет никаких проблем. Файл msgfmt используется для генерирования бинарных файлов перевода, которые позволяют системе общаться на другом языке. Так как эти файлы перевода уже сгенерированы, в использовании msgfmt нет необходимости. Нам понадобился бы msgfmt лишь в том случае, если мы изменили исходники файлов перевода (файлы *.po в подкаталоге po), т.к. нам пришлось бы заново генерировать бинарные файлы.

Пояснения команд

patch -Np1 -i ../glibc-2.2.5-2.patch: Этот патч переводит все упоминания о $(PERL) на /usr/bin/perl в файле malloc/Makefile. Это необходимо, т.к. Glibc не может определить местонахождение программ Perl, так как пакет Perl еще не был установлен. Данный патч также заменяет все упоминания о root на 0 в файле login/Makefile. Это необходимо, потому что сам пакет Glibc еще не установлен, и выявление идентификационного номера пользователя <userid> из имени пользователя невозможно. К примеру, команда chown root file не будет работать, в то время как при замене имени пользователя на userid, программа будет выполнена.

touch /etc/ld.so.conf: Один из заключительных шагов установки Glibc installation - выполнение команды ldconfig для обновления динамического кэша загрузки. Если этот файл не существует, инсталляция завершится с ошибкой, что не может прочесть файл. Для избежания подобной ошибки, мы просто создаем пустой файл (в случае пустого файла, Glibc будет по умолчанию использовать каталоги /lib и /usr/lib).

--disable-profile: Отменяет компиляцию библиотек с профильной информацией. Если вы собираетесь использовать профили, пропустите эту опцию.

--enable-add-ons: Включает дополнительные модули, в нашем случае linuxthreads.

--libexecdir=/usr/bin: Инсталлирует программу pt_chown в каталог /usr/bin.

echo "cross-compiling = no" > configparms: Этой командой мы даем понять, что компилируем пакет только для нашей системы. Кросс-компиляция используется, например, для того, чтобы скомпилировать пакет для системы Apple Power PC на Intel-совместимом компьютере. Glibc по умолчанию полагает, что мы кросс-компилируем, потому что не может скомпилировать тестовую программу для проверки, т.к. сам пакет Glibc еще не установлен.

exec /static/bin/bash --login: Данная программа запустит новый сеанс оболочки bash вместо текущего. Мы, таким образом, избавимся от приглашения "I have no name!" командной строки, которое было вызвано невозможностью bash получить имя пользователя из userid (из-за отстутствия Glibc).

Содержимое Glibc

Последняя проверка: версия 2.2.5.

Программы

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

Описания

catchsegv

catchsegv может быть использования для слежения за состоянием стека, когда выполнение программы прерывается из-за ошибки распределения памяти.

gencat

getconf

getconf отображает значения переменных, зависящих от системной конфигурации.

getent

getent позволяет получить записи административной базы данных.

glibcbug

iconv

iconv осуществляет преобразование наборов символов.

iconvconfig

iconvconfig создает конфигурационные файлы для модулей iconv.

ldconfig

ldconfig настраивает привязки времени исполнения динамического линкера.

ldd выводит список разделяемых библиотек, необходимых заданным программам.

lddlibc4

lddlibc4 используется ldd при работе с объектными файлами.

locale

locale - скрипт на Perl, разрешающий (или запрещающий) компилятору использование локалей POSIX для встроенных операций.

localedef

localedef компилирует спецификации локалей.

mtrace

mtrace выводит путь multicast от источника к получателю (запрос IP trace).

nscd - демон, предоставляющий кэш для большинства запросов DNS.

nscd_nischeck

nscd_nischeck проверяет нужен или нет защищенный режим для запроса NIS+.

pcprofiledump

pcprofiledump выводит информацию, полученной из профиля PC.

pt_chown

pt_chown устанавливает влдельца, группу и права доступа подчиненного псеводотерминала в соответствии с основным псевдотерминалом, переданном в описании `3'. Это вспомогательная программа для функции `grantpt'. Не предназначается для прямого запуска из командной строки.

rpcgen

rpcgen генерирует код C для реализации протокола RPC.

rpcinfo

rpcinfo делает запрос RPC к серверу.

sln символически связывает dest и source. Программа собрана статически. Использование sln полезно для создания символических ссылок на динамические библиотеки, если система динамического связывания по какой-то причине нефункциональна.

sprof

sprof выводит информацию о разделяемом объекте.

tzselect

tzselect получает от пользователя информацию от его местоположении и выводит на стандартный вывод значение текущей временной зоны.

xtrace

xtrace отслеживает исполнение программы, выводя исполняемые в данный момент функции.

zdump

zdump - сохраняет значение временной зоны.

zic - компилятор временных зон.

Библиотеки

ld.so, libBrokenLocale.[a,so], libBrokenLocale_p.a, libSegFault.so, libanl.[a,so], libanl_p.a, libbsd-compat.a, libc.[a,so], libc_nonshared.a, libc_p.a, libcrypt.[a,so], libcrypt_p.a, libdl.[a,so], libdl_p.a, libg.a, libieee.a, libm.[a,so], libm_p.a, libmcheck.a, libmemusage.so, libnsl.a, libnsl_p.a, libnss_compat.so, libnss_dns.so, libnss_files.so, libnss_hesiod.so, libnss_nis.so, libnss_nisplus.so, libpcprofile.so, libpthread.[a,so], libpthread_p.a, libresolv.[a,so], libresolv_p.a, librpcsvc.a, librpcsvc_p.a, librt.[a,so], librt_p.a, libthread_db.so, libutil.[a,so] и libutil_p.a

Описания

ld.so - вспомогательная программа для исполняемых файлов разделяемых библиотек.

libBrokenLocale, libBrokenLocale_p

Используется многими программами, например Mozilla, для использования поврежденных локалей.

libSegFault

libSegFault управляет сигналами ошибок распределения памяти, также пытается их перехватить.

libanl, libanl_p

libanl - библиотека асинхронных запросов DNS.

libbsd-compat

libbsd-compat предоставляет переносимость, необходимую для запуска некоторых программ в Linux.

libc, libc_nonshared, libc_p

Эти файлы образуют основную библиотеку C. Библиотека C - набор набор часто используемых в программах функций. Таким образом, программисту не нужно писать свои функции для каждой задачи. Большинство стандартных операций вроде вывода строки на экран уже готовы к использованию.

Библиотека C (в общем случае, любая библиотека) существует как в динамическом, так и статическом виде. Вкратце, когда программа использует статическую библиотеку, код из библиотеки копируется в исполняемый файл. При использовании динамической библиотеки, код из библиотеки не добавляется в исполняемый файл, а загружается только во время исполнения программы. Это позволяет уменьшить размер программ. За подробностями обращайтесь к документации библиотеки C.

libcrypt, libcrypt_p

libcrypt - криптографическая библиотека.

libdl, libdl_p

libdl - библиотека интерфейсов динамической линковки.

libg - библиотека времени исполнения g++.

libieee

libieee - IEEE библиотека операций с числами с плавающей запятой.

libm, libm_p

libm - математическая библиотека.

libmcheck

libmcheck - содержит код, выполняемый при загрузке.

libmemusage

libmemusage - используется memusage для сбора информации о памяти, используемой программой.

libnsl, libnsl_p

libnsl - библиотека сетевых сервисов.

libnss_compat, libnss_dns, libnss_files, libnss_hesiod, libnss_nis, libnss_nisplus

Основная идея - поместить реализацию различных сервисов доступа к базам данных в отдельные модули. Преимущества:

поставщики могут добавлять новые сервисы, не включая их в C библиотеку GNU,

модули могут быть независимо обновлены,

Библиотека C имеет меньший размер.

libpcprofile

Код, используемый ядром для отслеживания времени, затрачиваемого процессором на исполнение функций, отдельных строк кода и инструкций.

libpthread, libpthread_p

POSIX библиотека потоков.

libresolv, libresolv_p

Библиотека позволяет DNS-серверам создавать, посылать и интерпретировать пакеты.

librpcsvc, librpcsvc_p

Библиотека предоставляет различные сервисы RPC.

librt, librt_p

Библиотека предоставляет большинство интерфейсов, описанных POSIX.1b Realtime Extension.

libthread_db

Библиотека полезна для создания отладчиков для многопотоковых приложений.

libutil, libutil_p

Содержит код "стандартных" функций, используемых многими утилитами Unix.

Зависимости Glibc

Последняя проверка: версия 2.2.5.

Bash: sh
Binutils: ar, as, ld, ranlib, readelf
Diffutils: cmp
Fileutils: chmod, cp, install, ln, mknod, mv, mkdir, rm, touch
Gcc: cc, cc1, collect2, cpp, gcc
Grep: egrep, grep
Gzip: gzip
Make: make
Gawk: gawk
Sed: sed
Sh-utils: date, expr, hostname, pwd, uname
Texinfo: install-info, makeinfo
Textutils: cat, cut, sort, tr

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

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

Установка Glibc

Перед началом установки Glibc, вы должны перейти (с помощию команды cd , например) в директорию glibc-2.3.2 и распаковать Glibc-linuxthreads в этой директории, а не там где вы обычно распаковываете все исходники.

Замечание: Мы собираемся запустить тестирование для Glibc в этой главе. Это тестирование тут является менее важным, чем тестирование Glibc в Главе 6.

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

Также, Glibc имеет некоторые тонкие проблемы при компиляции с GCC 3.3.1. Применим следующий патч для их исправления:

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

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

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

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

--enable-add-ons : Это подключает любые дополнения при остановке Glibc, в нашем случае Linuxthreads.

--with-binutils=/tools/bin and --with-headers=/tools/include : Строго говоря, эти опции необязательны. Но они позволяют нам удостовериться, что будут использованы нужные заголовки ядра и программы Binutils для сборки Glibc.

--without-gd : Этот переключатель позволит нам быть уверенными, что не соберется программа memusagestat , которая будет пытаться подключить библиотеки из основной системы (libgd, libpng, libz и некоторые другие).

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

Отсутствующая или несовместимая программа msgfmt безвредна, но может привести к определенным проблемам при тестировании.

Тестирование Glibc сильно зависит от некоторых функций вашей основной системы, в частности ядра. Также, некоторые тесты в этой главе могут взаимодействовать с окружением вашей системы. Само собой, мы не должны получить таких проблем при запуске тестирования в Главе 6. В общем, тестирование Glibc должно пройти удачно. Тем не менее. по причинам, перечисленным ниже, тестирование может закончиться неудачно. Вот список наиболее вероятных причин этого:

Тест math иногда не проходит при его запуске на системе с процессорами, отличными от новых Intel-совместимых или оригинальных AMD. Также это может произойти при некоторых установках оптимизации.

Тест gettext иногда не проходит из-за зависимостей от основной системы. Точная причина пока не ясна.

Тест atime иногда не проходит когда раздел LFS монтирован с опцией noatime или из-за других причин, связанных с файловой системой.

Тест shm может не пройти, если в ващей системе запущена файловая система devfs, но нет файловой системы tmpfs, монтированой на /dev/shm, если отключена поддержка tmpfs в ядре.

При запуске на старом и медленном оборудовании некоторые тесты могут не пройти по тайм-ауту.

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

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

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

Читайте также: