Что такое glibc linux

Обновлено: 01.07.2024

Содержание

История

Вначале glibc была написана Роландом Макгратом (Roland McGrath), работавшем в FSF в 1980-x годах. В феврале 1988 года FSF представила glibc как библиотеку, имеющую наиболее полную функциональность, требуемую для ANSI C.

Временный форк glibc

В начале 1990-х годов разработчики ядра Linux создали форк glibc. Он был назван «Linux libc». Когда FSF выпустила в 1996 году glibc 2.0, которая поддерживала IPv6, 64-битный доступ к данным, многопотоковые приложения, совместимость с будущими версиями и более переносимый исходный код, разработчики Linux прервали разработку Linux libc и начали использовать glibc от FSF.

Поддерживаемые архитектуры и ядра

Glibc используется в системах, на которых работает много разных ОС, и на разных архитектурах. Наиболее часто glibc используется на x86-машинах с ОС GNU/Linux. Также официально поддерживаются следующие архитектуры: SPARC, Motorola 68k, DEC Alpha, PowerPC, ARM, ETRAX CRIS, s390.

Критика

glibc часто критикуют за её «раздутость» и медленную скорость работы по сравнению с другими прошлыми библиотеками. Поэтому были созданы несколько альтернативных стандартных библиотек языка Си (dietlibc, uClibc и Newlib).

Примечания

  1. Drepper, Ulrichglibc 2.11. Список рассылки libc-alpha (30 октября 2009). Проверено 11 ноября 2009.

Ссылки

Wikimedia Foundation . 2010 .

Полезное

Смотреть что такое "Glibc" в других словарях:

Glibc — Basisdaten Entwickler: Free Software Foundation Aktuelle Version … Deutsch Wikipedia

Glibc — GNU C Library Développeur Projet GNU Dernière version … Wikipédia en Français

glibc — В этой статье не хватает ссылок на источники информации. Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена. Вы можете отредактировать эту статью … Википедия

Glibc — No debe confundirse con GLib. GNU C Library Desarrollador Proyecto GNU … Wikipedia Español

Glibc — Introducción Glibc es la biblioteca estándar de C GNU, también es conocidad como libc6, bajo licencia LGPL. Glibc es la biblioteca de C que proporciona y define las llamadas al sistema y otras funciones básicas, también es utilizada por todos los … Enciclopedia Universal

GLibc — … Википедия

glibc — Generalized LibraryC Routinenbibliothek, Nachfolgeversion von libc5 (LINUX) … Acronyms

glibc — ● sg. np. f. ►LINUX GNU Library C. bibliothèque C du projet GNU. En version 2 actuellement … Dictionnaire d'informatique francophone

glibc — Generalized LibraryC Routinenbibliothek, Nachfolgeversion von libc5 (LINUX) … Acronyms von A bis Z

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

Библиотека GNU C, описанная в этом документе, содержит описание всех библиотечных функций, которые определены в соответствии c ANSI C стандартом, учитывая дополнительные особенности, специфические для POSIX-стандарта операционной системы UNIX, и расширений, специфических для GNU-разработок.

Цель этого руководства состоит в том, чтобы сообщить Вам, как использовать средства GNU библиотеки. Мы упомянули особенности ее стандартов, чтобы помочь Вам разобраться с вещами, которые являются потенциально непереносимыми на другие системы. Но переносимость не является основным вопросом данного руководства.

Это руководство написано с учетом того, что Вы по крайней мере немного знакомы с языком программирования C и базисными понятиями программирования. Вообще считается, что стандарт ANSI C (см. раздел 1.2.1 [ANSI C]) проще для понимания, чем "традиционные", предшествующие ANSI C, диалекты.

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

Этот раздел обсуждает различные стандарты и другие источники, на которых базируется GNU C. Эти источники включают стандарты ANSI и POSIX, а так же реализации System V и Berkeley Unix.

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

См. Приложение B [Обзор библиотеки], для получения алфавитного списка функций и других символов, обеспечиваемых библиотекой. Этот список указывает также, на какие стандарты опирается каждая функция или символ.

ANSI C

Библиотека GNU C совместима со стандартом C, принятым Американским Институтом Национальных Стандартов (ANSI): American National Standard X3.159-1989_"ANSI C". Заголовочные файлы и библиотечные средства, которые составляют библиотеку GNU - надмножество средств, определенных в соответствии c ANSI C стандартом.

Библиотека GNU C

Если Вы следуете относительно строгой приверженности к ANSI C стандарту, Вы должны использовать опцию ` -ansi ', когда Вы компилируете ваши программы компилятором GNU C. Эта опция указывает, чтобы транслятор определил только возможности стандарта ANSI из библиотечных заголовочных файлов, если Вы явно не попросите о дополнительных особенностях, для получения информации относительно того, как это сделать см. раздел 1.3.4 [Макрокоманды установки возможностей].

Способность ограничить библиотеку, чтобы включить только возможности ANSI C важна, потому что ANSI C устанавливает ограничения, которым не удовлетворяют некоторые имена, определяемые библиотечной реализацией, т.е. GNU расширения не всегда удовлетворяют этим ограничениям. См. раздел 1.3.3 [Зарезервированные имена], где приводится более подробная информация относительно этих ограничений.

Это руководство не будет вдаваться в подробности различий между ANSI C и более старыми диалектами. Оно поможет вам написать программы, чтобы работать корректно под многими диалектами С, но не более.

Библиотека GNU также совместима с семейством стандартов IEEE POSIX, известных более формально как Переносной Интерфейс Операционной Системы. POSIX взят в основном из различных версий операционной системы UNIX.

Библиотечные средства, определенные POSIX стандартами ­ надмножество соответствующих cтандарту ANSI C; POSIX определяет дополнительные особенности для функций ANSI С, и задает определения новых дополнительных функций. Вообще предпочтение отдается скорее дополнительным требованиям и функциональным возможностям, определяемым POSIX стандартами, обеспечивающим поддержку низшего уровня для определенной среды операционной системы, чем общей поддержке языка программирования, который может выполняться в многих разнообразных средах операционной системы.

GNU C библиотека осуществляет все функции, определенные в IEEE Std 1003.1-1990, Системе Интерфейса Прикладных программ POSIX, обычно упоминающемся как POSIX.1. Первичные расширения к ANSI C средствам, определенные этими стандартными примитивами интерфейса файловой системы (см. Главу 9 [Интерфейс файловой системы]), зависят от устройства функции управления терминалом (см. Главу 12 [Интерфейс терминала низкого уровня]), и функции управления процессом (см. Главу 23 [Порожденнные процессы]).

Некоторые средства из IEEE Std 1003.2-1992, Стандарта Оболочки и Утилит POSIX (POSIX.2) также представлены в библиотеке GNU. Они включают в себя утилиты для обработки регулярных выражений и других средств сопоставления с образцом (см. Главу 16 [Сопоставления с образцом]).

Berkeley Unix

GNU C библиотека определяет средства (которые формально не стандартизированы) из некоторых версий UNIX: 4.2 BSD, 4.3 BSD, и 4.4 BSD Unix системы (также известной как Berkeley Unix) и из SunOS (популярной 4.2 BSD производной, которая включает некоторые функциональные возможности Unix System V ). Эта система поддерживает большинство ANSI и POSIX средств, 4.4 BSD и более новые выпуски SunOS, т.е. фактически поддерживает их все.

BSD средства включают символические связи (см. раздел 9.4 [Символические связи]), функцию выбора (см. раздел 8.6 [Ожидание ввода ­ вывода]), функции сигнала BSD (см. раздел 21.9 [BSD Обработка сигнала] ), и межпроцессорные связи (см. Главу 11 [Гнезда]).

SVID (Описание интерфейса System V)

Описание Интерфейса System V (SVID) - документ, описывающий AT&T операционную систему Unix System V. Это -, в некоторой степени, надмножество стандарта POSIX (см. раздел 1.2.2 [POSIX])

GNU C библиотека определяет некоторых из средств, требуемых SVID, и не требуемых в соответствии c ANSI или POSIX стандартами, для совместимости с Unix System V и другой UNIX системой (типа SunOS), которые включают эти средства. Однако, многие из большего количества менее известных и менее полезных средств, требуемых SVID не включены. (Фактически, Unix System V сама не обеспечивает их все.)

Этот раздел описывает некоторые из практические проблемы использования GNU C библиотек.

Заголовочные файлы

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

( В Cи, описание просто представляет информацию,что функция или переменная существует, и присваивает ей тип. Для функционального объявления, нужно указать информацию относительно типов параметров. Цель объявлений состоит в том, чтобы транслятор правильно обработал ссылки к объявленным переменным и функциям. С другой стороны, определение фактически распределяет память для переменных или указывает, что делает функция.)

Чтобы использовать средства библиотеки GNU C, Вы должны убедиться, что ваши исходные программы включают соответствующие заголовочные файлы, чтобы транслятор видел объявления доступных средств, и мог правильно обрабатывать ссылки на них. При компиляции вашей программы, компоновщик свяжет эти ссылки с фактическими определениями, находящимися в файле архива.

обычно используется, чтобы включить заголовочный файл header, который Вы пишете самостоятельно; он обычно содержит определения и объявления, описывающие интерфейсы между различными частями вашей конкретной прграммы. Другая форма, обычно используется, чтобы включить заголовочный файл "file.h" который содержит определения и объявления для стандартной библиотеки. Этот файл обычно устанавливается в стандартное место вашим администратором системы. Вы должны использовать эту вторую форму для файлов заголовка библиотеки C.

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

Некоторые библиотечные заголовочные файлы включают другие библиотечные заголовочные файлы. Однако, программируя в хорошем стиле, Вы не должны полагаться на это; лучше явно включить все заголовочные файлы, требуемые для библиотечных средств, которые Вы используете. GNU C библиотека была написана таким способом, что не имеет значения, включен ли заголовочный файл случайно больше чем один раз; при включении заголовочного файла второй раз ничего не происходит. Аналогично, если ваша программа многократно включает заголовочные файлы, порядок включения, не имеет значения.

Примечание относительно совместимости: включение стандартного заголовочного файла в любом порядке и любое число раз работает в любой ANSI C реализации. Однако, этого традиционно не было во многоих более старых C реализациях.

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

Макроопределения функций

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

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

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

Зарезервированные имена

  • Другие люди, читая ваш код могут запутаться, если Вы использовали функцию exit, чтобы делать что - нибудь полностью отличное от того, что делает стандартная функция выхода. Предотвращение этой ситуации помогает делать ваши программы более простыми, для понимания и способствует модульности.
  • Это лишает пользователя возможности случайно переопределить библиотечную функцию, которая вызывается в соответствии c другими библиотечными функциями. Если переопределение позволялось, те другие функции не будут работать.
  • Это позволяет транслятору делать любые специальные оптимизации опираясь на обращения к этим функциям, без риска, что они могут быть переопределены пользователем. Некоторые библиотечные средства, такие как variadic функции (с переменным числом аргументов, см. раздел A.2 [Variadic функции]) и нелокальные выходы (см. Главу 20 [Нелокальные выходы]), фактически требуют более близкого сотрудничества с частью C транслятора, и для транслятора проще обрабатывать их как встроенные части языка.

Макрокоманды управления особенностями

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

Если Вы компилируете ваши программы, используя "gcc -ansi", Вы получаете только ANSI C библиотечные особенности, если Вы явно не запрашиваете дополнительные особенности, определяя одну или большее количество макрокоманд особенностей. См. раздел "Опции Команд GNU CC" в GNU CC Руководстве, для уточнения информации относительно опций GCC.

Если Вы определяете эту макрокоманду, то функциональные возможности из стандарта POSIX.1 (Стандарт ИИЭРа 1003.1) доступны, также как все ANSI C средства.

Если Вы определяете эту макрокоманду со значением 1, то будут определены функциональные возможности из стандарта POSIX.1 (Стандарт ИИЭР 1003.1). Если Вы определяете эту макрокоманду со значением 2, то станут доступны функциональные возможности из стандарта POSIX.1 и функциональные возможности из стандарта POSIX.2 (Стандарт ИИЭР 1003.2). Это - в дополнение к ANSI C средствам.

Если Вы определяете эту макрокоманду, включаются функциональные возможности 4.3 BSD Unix, также как ANSI C, POSIX.1, и POSIX.2.

Некоторые из особенностей происходящие от 4.3 BSD Unix конфликтуют с соответствующими особенностями, определенными стандартом POSIX.1. Если эта макрокоманда определена, 4.3 BSD определения, имеют больший приоритет чем POSIX определения.

Из-за некоторых конфликтов между 4.3 BSD и POSIX.1, Вы должны использовать специальную BSD библиотеку совместимости при компоновании программ, компилируемых для BSD совместимости. Т. к. некоторые функции должны быть определены двумя различными способами, один из них в нормальной библиотеке C, а другой в библиотеке совместимости. Если ваша программа определяет _BSD_SOURCE, Вы должны указать опцию "-lbsd-compat" транслятору или компоновщику при компоновании программы, чтобы он нашел функции в этой специальной библиотеке совместимости перед поиском их в нормальной библиотеке C.

Если Вы определяете эту макрокоманду, функциональные возможности из SVID, включены также как ANSI C, POSIX.1, и POSIX.2.

Если Вы определяете эту макрокоманду, включены все: ANSI C, POSIX.1, POSIX.2, BSD, SVID, и расширения GNU. В случаях, конфликтов POSIX.1 с BSD, POSIX определения берут верх.

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

Обратите внимание, что, если Вы делаете это, Вы должны компоновать вашу программу с BSD библиотекой совместимости, указывая опцию `­ lbsd-compat' транслятору или компоновщику. Обратите внимание: если Вы забудете сделать это, Вы можете получить очень странные ошибки во время выполнения.

Мы рекомендуем, чтобы Вы использовали _GNU_SOURCE в новых программах. Если Вы не определяете опцию `-ansi' для GCC и не определяете никакую из этих макрокоманд явнно, то _GNU_SOURCE дает тот же эффект. Когда Вы определяете макрокоманду, чтобы запросить больший класс особенностей, безобидно определить кроме того макрокоманду для подмножества этих особенностей. Например, если Вы определяете _POSIX_ C_SOURCE, то определение _POSIX_SOURCE не имеет никакого эффекта. Аналогично, если Вы определяете _GNU_SOURCE, определяя затем либо _POSIX_SOURCE либо _POSIX_C_SOURCE либо _SVID_SOURCE, также не будет никакого эффекта.

Обратите внимание, что особенности _BSD_SOURCE не подмножество любой другой из обеспечиваемых макрокоманд особенностей. Потому что эта макрокоманда определяет особенности BSD, которые берут верх над особенностями POSIX, которые запрашиваются другими макрокомандами. По этой причине, определение _BSD_SOURCE в дополнение к другим макрокомандам особенностей заставляет особенности BSD брать верх при конфликтое с особенностями POSIX .

glibc — сокращение названия проекта GNU C Library, главная цель которого реализовать основные библиотеки для систем GNU, GNU\Linux, а так же для любых других систем, которые используют ядро Linux. Библиотеки glibc предоставляют реализацию API описываемое стандартами ISO C11, POSIX.1-2008, а так же API для BSD систем, и разные другие API для систем. Так glibc поддерживает реализацию функций для библиотек C++. Среди этих функций open, read, write, malloc, printf, getaddrinfo, dlopen, pthread_create, crypt, login, exit. [Источник 1]

glibc - распространяется под лицензией GNU LGPL.

Содержание

История

Первоначально большую часть библиотек glibc написал Роланд Макграт в 1980 годах, во время работы в Free Software Foundation (FSF).

В феврале 1988, фонд FSF объявил, что glibc имеет практически полный функционал требуемый стандартом ANSI C. [Источник 2] Уже в 1992, glibc поддерживал стандарты ANSI C-1989 и POSIX.1-1990, и шла активная работа над стандартом POSIX.2. [Источник 3] В сентябре 1995 Ульрих Дреппер внёс свой первый вклад в проект glibc и постепенно в течении 1990 годов стал основным разработчиком glibc. [Источник 4] Дреппер занимал руководящие должности долгие годы, к 2012 году 65% всех коммитов проекта принадлежало ему. [Источник 5]

Форк Linux libc

В начале 1990 годов, разработчики ядра Linux форкнули glibc 1.x. Этот форк, названный «Linux libc», сокращённо «libc», разрабатывался изолированно несколько лет, в течении этого времени были выпущены версии со второй по пятую. Разработчики объясняли свои действия тем, что по их мнению glibc не удовлетворял все потребности Linux. [Источник 6]

В январе 1997 года, FSF выпустила glibc 2.0. Новая версия glibc точнее соответствовала стандарту POSIX, поддерживала интернационализацию, IPv6, 64-разрядный доступ к данным, многопоточные приложения, совместимость будущих версий, так же код новой версии glibc был более переносимым. Таким образом, новая версия glibc явно превосходила во всех отношениях libc, поэтому все крупные дистрибутивы Linux, которые начали использовать libc, вернулись на glibc. [Источник 6]

Последняя используемая версия Linux libc, использовала внутренние имя (soname) libc.so.5. Версия glibc 2.x использует soname libc.so.6 [Источник 7] (на архитектурах Alpha и IA64 вместо этого используется имя libc.so.6.1). Имя файла *.so часто сокращаются до libc6 (как например имя соответствующего пакета в Debian), следуя обычным соглашениям для библиотек.

По словам Ричарда Столлмана, изменения из Linux libc нельзя перенести обратно в glibc, потому что авторство этого кода неясно, а проект GNU довольно строго относится к сохранению записей об авторских правах. [Источник 8]

Создание руководящего комитета

Начиная с 2001 года развитие библиотеки контролировалось комитетом [Источник 9] с Ульрихом Дреппером в качестве ведущего программиста. Создание управляющего комитета было окружено публичной полемикой, в дальнейшем описанной Ульрихом Дреппером, как неудачная попытка Ричарда Столлмана враждебного поглощения. [Источник 10]

Миграция на Git

До 2009 года проект glibc пользовался Concurrent Versions System, однако после 2009 glibc мигрировал на Git на Sourceware. [Источник 11]

Переход Debian на EGLIBC и обратно

После долгих споров о стиле руководства Дреппера, и принятие внешних коммитов, Debian перешёл на открытый форк библиотеки glibc: EGLIBC в 2009 году. [Источник 12] Обратно на основную ветку разработчики перешли с версии Debian 8.0 (Jessie) в апреле 2015. [Источник 13]

Расформирование руководящего комитета

В марте 2012 года, руководящий комитет проголосовал, за то чтобы расформировать себя и остранить Дреппера, вместе с Райаном Арнольдом, Максимом Кувырковым, Джозефом Майерсом, Карлосом О'Донеллем и Александром Оливой, несущих ответственность за поддержку GNU. Разработка glibc оставлена открытому сообществу разработчиков. [Источник 14] [Источник 15]

После изменения поддержки glibc Debian и другие проекты, ранее переключившиеся на альтернативные реализации библиотеки Си, вернулись к glibc. [Источник 16] Кроме того с начала 2014 года, форк EGLIBC прекратил своё существование.

Функциональность

glibc предоставляет функциональные возможности, требуемые Single UNIX Specification, POSIX (1c, 1d и 1j) и некоторые функциональные возможности, необходимые для ISO C11, ISO C99, BSD Interface, System V Interface Definition, X/Open Portability Guide (XPG), Issue 4.2.

Кроме того, Glibc также предоставляет расширения, которые были сочтены полезными или необходимыми при разработке GNU.

Поддерживаемое оборудование и ядра

glibc используется в системах, которые используют различные ядра и оборудование. Наиболее часто glibc используется в системах с ядром Linux на x86 архитектуре, однако, официально поддерживаются следующие архитектуры [Источник 17] : 32-битный ARM и более новая версия 64-битный ISA (AArch64), DEC Alpha, PA-RISC, IA-64, Motorola m68k, MicroBlaze, MIPS, Nios II, PowerPC, s390, SPARC, TILE, и x86. Так официально поддерживаются ядро Hurd и ядро Linux. Вдобавок, существуют сильно изменённые версии, которые работает на ядрах FreeBSD и NetBSD. Так же изменённая версия glibc, под именем libroot.so используется в BeOS и Haiku. [Источник 18]

Использование в небольших устройствах

glibc в прошлом, подвергался критике (например, Линусом Торвальдсом [Источник 19] ), как "раздутая" и медленная реализация библиотек по сравнению с другими реализация. По этой причине, было создано несколько альтернативных стандартных библиотек Си, которые ставили одной из своих целей небольшой размер. Тем не менее, проекты с небольшими устройствами всё ещё используют glibc, а не альтернативы, из-за лучшей поддержке приложений, более полного соответствия стандарту и всеобъемлимости. В качестве примера можно привести Openmoko [Источник 20] и Familiar Linux для карманных компьютеров iPaq. [Источник 21]

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

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

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

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

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

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

Система сборки Glibc является весьма самодостаточной и должна установится корректно, даже если ваши spec файл и компоновщик находятся в /tools. Мы не можем установить spec и компоновщик перед установкой Glibc потому, что тест автоконфинурации Glibc даст фиктивные результаты и от этого зависит чистота сборки.

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

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

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

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

[Important]

Важно

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

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

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

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

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

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

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

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

Некоторые локали, установленные командой make localedata/install-locales , не полностью поддерживаются некоторыми приложениями, описанными в LFS и BLFS книгах. Поскольку такие проблемы существуют и приводят к сбоям на некотрых локалях, LFS не может быть использована с локалями, использующими мультибайтные таблицы символов (включая UTF-8) или пишущиеся в порядке справа налево. Необходимы многочисленные неофициальные и нестабильные патчи для устранения этих проблем, поэтому LFS-разработчиками было решено не поддерживать таких комплексных локалей. Это применено также к локалям ja_JP и fa_IR - они были установлены только для прохождения тестов GCC и Gettext и программы watch (части пакета Procps), которые не работают корректно в них. Некоторые попытки обойти эти ограничения описаны в интернационально-связанных заметках.

Соберем документацию по linuxthreads, которая является большим описанием по threading API (применимой и к NPTL):

Проинсталируем эту документацию:

6.11.2. Конфигурация Glibc

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

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

Для определения вашего часового пояса, запустите скрипт:

Когда вы ответите на некоторые вопросы о вашим местонахождении, скрипт выдаст имя вашего часового пояса. Что-то наподобие Europe/Kiev . Затем создадим файл /etc/localtime запуском:

Замените [xxx] именем часового пояса, который выдаст tzselect (например, Europe/Kiev).

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

6.11.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.11.4. Описание Glibc

Проинсталированные программы: catchsegv, gencat, getconf, getent, 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], 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]

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

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

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

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

Осуществляет конвертацию символов

iconvconfig

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

Конфигурирует динамический компоновщик

Сообщает, какие разделяемые библиотеки требуются каждой указанной программе или разделяемой библиотеке

Помагает ldd в работе с объектными файлами

Говорит компилятору разрешить или запретить использование POSIX локалей для встроенных операций

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

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

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

nscd_nischeck

Проверяет, необходим или нет безопасный режим для NIS+lookup

pcprofiledump

Распечатывает информацию, сгенерированную PC profiling

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

Генерирует C код для встраивания в протокол вызова удаленной процедуры (Remote Procecure Call - RPC)

Создает вызов RPC к RPC серверу

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

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

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

Отслеживает запуск программы, печатая текущую запущенную функцию

Информация о часовом поясе

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

Программа-загрузчик для разделяемых библиотек

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

Библиотека сигналов ошибки сегментации

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

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

Базовая библиотека C

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

Библиотека для g++

Библиотека для работы с числами с плавающей запятой Института "Electrical and Electronic Engineers" (IEEE)

Описывает запуск кода при загрузке

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

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

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

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

Описывает функции, предоставляющие разнообразные RPC сервисы

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

Описывает функции, полезные для построения отладчиков для multi-threaded программ

Описывает код для “ стандартных ” функций, используемых во многих других Юникс утилитах

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