Linux Tux logo

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

1. Минимально необходимое для сборки.

GNU make 3.79 или новее (рекомендуется использовать последнюю из доступных версий).
GCC 3.4 или новее (на данный момент новее GCC 4.1.0, рекомендуется разработчиками).
GNU binutils 2.15 или новее.
GNU texinfo 3.12f или новее.
GNU awk 3.0 или аналогичный (помоему все используют gawk).
Perl 5 (для сборки не нужен, только для выполнеия make test).
GNU sed 3.02 или старше.

2. Параметры кофигурации. (фаил “INSTALL” в дереве исходников)

Разработчики glibc не рекомендуют выполнять сборку в директории с исходниками, а создавать для сборки пустую директорию, например так:
имеем /usr/src/glibc-2.4
создаем mkdir /usr/src/glibc-build
идем туда cd /usr/src/glbc-build
строим ../glibc-2.4/configure

собственно параметры:

--prefix=directory
Путь установки машино-независимых файлов данных в поддиректории директории directory. Например библиотеки будут установлены в /dir/lib, хедеры в /dir/include и т. д. По умолчанию prefix=/usr/local. В некоторых системах (например Slackware) пакеты установлены с префиксом /usr. Для таких систем все баовые пакеты рекомендуется устанавливать с –prefix=/usr.
Префикс по умолчанию можно изменить если Вы хотите создать инсталляционный пакет (rpm, deb, tgz). Например –prefix=/tmp/имя_пакета/ващ_системный_префикс, далее идете в /tmp/имя_пакета и создаете инсталляционный пакет используя соответствующую утилиту.

--exec-prefix=directory
Можно указать отдельно директорию для библиотек и других машино-зависимых файлов. По умолчанию –exec-prefix=prefix или, еслил префикс не указан – /usr/local.

--with-headers=directory
Указывает искать файлы заголовков ядра в директории directory, а не в /usr/include. Glibc использует информацию из файлов заголовков ядра. Эту опцию нужно использовать только если в /usr/inclue находятся заголоки ядра которые использовались со старой версией glibc, или если Вы хотите скомпилировать glibc с более новой версией заголовков ядра.
При компиляции приложений должны использоваться те же заголовки ядра, что использовались при компиляции glibc.

--enable-add-ons[=list]
Подключает указанные в “list” расширения из дереа исходников. Опция без параметров подключит все расширения которые будут найдены.

--enable-kernel=version
Указывает минимальную версию ядра для поддержки которой будут скомпилированы библиотеки. К примеру –enable-kernel=2.6.0 исключает поддержку ядер 2.5.Х и ниже. Параметр version должен иметь вид X.X.X.

--with-binutils=directory
Указывает компилятору использовать линкер и ассемблер не из директории по умолчанию. Переопределять установленные в системе binutils необходимо в случае, когда они не обеспечивают нужной функциональности (не поддерживют все хфункций компилируемой библиотеки). Как правило .. при переходе на новые версии glibc.

--without-fp
Если нет аппаратной поддержки вычислений с плавающей точкрй и если операционная сисема не эмулирует FPU (наверное такое бывает).

--disable-shared
Не использовать разделяемые библиотеки если это возможно. Поскольку не все системы поддерживают разделяемые библиотеки. Такое чувство, что современных linux-like это не касается.

--disable-profile
Не использовать профильную информацию при сборке.

--enable-omitfp
Использовать максимальную оптимизацию для нормальных разделяемых и статических библиотек. Компилировать отдельные (обособленные) статические библиотеки с отладочной информацией без оптимизации. Разработчики не рекомендуют. Не будем.

--disable-versioning
Компилировать разделяемые библиотеки без информации о версии. Такие библиотеки несовместимы со старыми исполняемыми файлами. Не рекомендуется.

--enable-static-nss
Компилировать статическую версию NSS библиотек. Используется glibc для работы с сетью. Name Service Switch – определяет сервис имен который будет использовать прикладная программа для поиска по имени в базе данных (текстоый файл, DNS, NIS .. etc).
Не рекомендуется. Прогамма с прилинкованными статически NSS библиотеками не может быть динамиески
переконфигурирована для использования различных баз имен.

--build=build-system
--host=host-system

Опции кросс-компиляции. Если указать обе опции и build-system отличаются от host-system, библиотеку, скомпилированную на build-system, можно будет использовать на host-system. Если использовать только опцию host библиотека будет скомпилирована дял использования на определенной системе. Использование только опции build приведет к ошибке конфигурации.

3. Компиляция и установка.

make
make check
make install

Занимает достаточно длительное время даже на быстрых машинах. Не менее длительное время занимает тестирование. Тестирование настоятельно рекомендуется. Для выполнения тестирования могут потребоваться дополнительные пакеты.
Компиляцию и тестирование рекомендуется выполнять непривилегированным пользователем. Для параллельнойкомпиляции можно использовать опцию -j:

make -j4

Для оптимизации под конкретную архитектуру используются флаги компилятора CFLAGS. Если при тестировании возникет много ошибок, попробуйте скомпилировать библиотеку без оптимизации.
Библиотека имеет ряд специальных параметров, описанных в файле Makeconfig. Эти параметры можно переопределить создав в build – директории файл configparams. Параметры можно переопределить также задав переменные среды окружения перед выполнением компиляции.

После инсталляции необходимо сконфигурировать locale & timezone.

make localedata/install-locales

Установит все сущестующие локали. Для установки определенных локалей используется localedef.

localedef -i de_DE -f ISO-8859-1 de_DE

Установит немецкую локаль (ну такой пример в доке).

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

cat > /etc/nsswitch.conf < < “EOF” passwd: compat group: compat hosts: files dns networks: files services: files protocols: files rpc: files ethers: files netmasks: files netgroup: files bootparams: files automount: files aliases: files EOF