The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Каталог документации / Раздел "Программирование, языки" / Оглавление документа

Компиляция пакета GLib

Compiling the GLib Package — Как самостоятельно скомпилировать GLib

Сборка библиотеки в UNIX

В UNIX, GLib использует стандартную систему сборки GNU, autoconf для конфигурации пакета и решения проблем переносимости, automake для создания makefiles который выполняется с помощью GNU Coding Standards и libtool для сборки общих библиотек на множестве платформ. Нормальная последовательность сборки и инсталяции GLib библиотеки такая:


          ./configure
          make
          make install
        

Стандартные опции представленные GNU autoconf можно передать в скрипт configure. Пожалуйста изучите autoconf документацию или запустите ./configure --help для получения информации о стандартных опциях.

GTK+ документация содержит further details о процессе сборки и способах влияния на него.

Зависимости

Перед компиляцией библиотеки GLib, вам необходимо иметь дополнительные инструменты и библиотеки установленные в вашей системе. Два инструмента необходимы в течении процесса сборки (которые отличаются от от инструментов используемых при создании GLib, упомянутых выше таких как autoconf) pkg-config и GNU make.

  • pkg-config это инструмент для отслеживания флагов компиляции необходимых для библиотек которые используются библиотекой GLib. (Для каждой библиотеки, в стандартном расположении установлен текстовый файл .pc который содержит флаги компиляции необходимые для данной библиотеки и номер её версии.) Версия pkg-config необходимая для сборки GLib указана в каталоге зависимостей на GTK+ FTP сайте.

  • GTK+ makefiles будет работать с разными версиями make, однако, есть некоторая тенденция небольших несовместимостей, поэтому команда разработчиков GTK+ рекомендует установить GNU make если она ещё не установлена в вашей системе и использовать именно её. (Она может называться gmake вместо make.)

GLib зависит от множества других библиотек.

  • Библиотека GNU libiconv необходима для сборки GLib если ваша система не имеет iconv() функции для конвертации символов в разных кодировках. Современные системы должны иметь iconv(), однако некоторые устаревшие системы не имеют iconv(). На таких системах, вы должны установить библиотеку libiconv. Она может быть найдена на: http://www.gnu.org/software/libiconv.

    Если ваша система имеет iconv() реализациию, но вы хотите использовать libiconv вместо неё, то вы должны указать опцию --with-libiconv для скрипта configure. Это заставит использовать libiconv.

    Помните что если вы имеете libiconv установленную в путь поиска по умолчанию (например в /usr/local/), но не включаете её, вы получите ошибку в процессе компиляции GLib, потому что iconv.h установленной libiconv скрывает системную iconv.

    Если вы используете родную реализацию iconv в Solaris вместо libiconv, вы должны убедиться что можете конвертировать между локальной кодировкой и UTF-8. Как минимум вам нужен пакет SUNWuiu8. Вероятно вам потребуется установить также пакеты SUNWciu8, SUNWhiu8, SUNWjiu8 и SUNWkiu8.

    Родная iconv в Compaq Tru64 не поддерживает UTF-8, поэтому вам необходимо использовать вместо неё GNU libiconv. (Когда используете GNU libiconv для GLib, вы также должны использовать GNU libiconv для GNU gettext.) Это также касается связанных с ней систем.

  • Библиотека libintl из GNU gettext package необходима если ваша система не имеет gettext() функций для обработки базы переводимых сообщений.

  • Реализация потоков (thread) необходима, если вам нужно собрать GLib без поддержки потоков (thread support), что не рекомендуется. Поддержка потоков в GLib может базироваться на некой родной реализации потоков, например POSIX threads, DCE threads или Solaris threads.

Дополнительные конфигурационные опции

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

configure [[--enable-debug=[no|minimum|yes]]] [[--disable-gc-friendly] | [--enable-gc-friendly]] [[--disable-mem-pools] | [--enable-mem-pools]] [[--disable-threads] | [--enable-threads]] [[--with-threads=[none|posix|dce|win32]]] [[--disable-included-printf] | [--enable-included-printf]] [[--disable-visibility] | [--enable-visibility]] [[--disable-gtk-doc] | [--enable-gtk-doc]] [[--disable-man] | [--enable-man]]

--enable-debug Включает разное количество отладочной поддержки. Установка в значение 'no' отключает g_assert(), g_return_if_fail(), g_return_val_if_fail() и контроль приведения между разными типами объектов. Установка в значение 'minimum' отключает только контроль приведения типов. Установка в значение 'yes' включает отладку во время выполнения. По умолчанию используется значение 'minimum'. Помните что значение 'no' ускоряет процесс, но опасно, поскольку имеет тенденцию дестабилизировать даже программное обеспечение без ошибок превращая эффект от небольших ошибок в фатальные сбои. Поэтому --enable-debug=no не должен использоваться для стабильных реализаций GLib.

--disable-gc-friendly и --enable-gc-friendly По умолчанию, а также с помощью --disable-gc-friendly Glib не очищает память для определённых объектов прежде чем они освобождаются. Например, Glib может решить переработать узлы GList поместив их в освобождённый список. Однако, профилирование памяти и инструменты отладки такие как Valgrind работают лучше если приложение не сохраняет указатели в освобождённой памяти (даже если эти указатели больше не разыменованы), или не допускает указатели внутри не инициализированной памяти. Опция --enable-gc-friendly заставляет Glib очищать память в этой ситуации:

  • Когда сокращается GArray, Glib очищает память не доступную больше в массиве: сокращая массив из 10 байт в 7, последние 3 байта будут очищены. Это включает удаление единственных и множественных элементов.

  • Когда увеличивается GArray, Glib очищает новую часть памяти. При увеличении массива с 7 байт до 10 байт, последние 3 байта очищаются.

  • Выше упомянутое также относится и к GPtrArray.

  • Когда освобождаются узлы из GHashTable, Glib сначала очищает узел, который имеет указатель на ключ и значение сохранённое в этом узле.

  • Разрушая или удаляя узел GTree, Glib очищает узел, который имеет указатель на значение узлов, а также левые и правые подузлы.

Начиная c очистки памяти, значение --disable-gc-friendly по умолчанию.

--disable-mem-pools и --enable-mem-pools Множество небольших участков памяти часто распределяются через пулы в GLib и кэшируются после реализации для ускорения перераспределения. Для разряженных систем памяти это поведение является плохим, поэтому пулы памяти могут быть отключены, чтобы избежать чрезмерное кэширование и заставить сопровождать атомарные участки через g_malloc() и g_free() функции. Код в настоящее время влияет на:

  • GList, GSList, GNode, распределения GHash. Функции g_list_push_allocator(), g_list_pop_allocator(), g_slist_push_allocator(), g_slist_pop_allocator(), g_node_push_allocator() и g_node_pop_allocator() не доступны.

  • GMemChunks в основном не эффективны.

  • GSignal отключает всё кэширование (потенциально очень медленный).

  • GType не учитывает GTypeInfo n_preallocs поля больше.

  • GBSearchArray флажок G_BSEARCH_ALIGN_POWER2 не функционален.

--disable-threads и --enable-threads Не компилируйте GLib многопоточностью, тогда GLib будет немного быстрее. Однако это не рекомендуется, так как множество программ предполагает что GLib имеет многопоточность.

--with-threads Определяет использование многопоточной реализации.

  • 'posix' и 'dce' могут быть взаимозаменяемыми для обозначения различных версий Posix threads. Скрипт configure попытается определить, какой из них установлен.

  • 'none' означает что GLib будет сохранять многопоточность, но не имеет по умолчанию реализованной многопоточности. Это должно определяться с помощью g_thread_init() программистом.

--disable-included-printf и --enable-included-printf По умолчанию скрипт configure попытается автоматически определить использует ли C библиотека подходящий набор функций printf(). Точнее, configure проверит семантику snprintf() на соответствие стандарту C99 и что позиционные параметры соответствуют Single Unix Specification. Если это не так, GLib включит реализацию семейства функций printf(). Эти опции могут использоваться для непосредственного осуществления контроля включения или не включения реализации семейства функций printf().

--disable-visibility и --enable-visibility По умолчанию, GLib использует видимые атрибуты в формате ELF для оптимизации PLT таблицы ввода если компилятор поддерживает ELF видимые атрибуты. Побочный эффект в том что текущая реализация при любом изменении заголовка вызывает полную перекомпиляцию, а отсутствие includes может быть незамечено. Поэтому имеет смысл выключать эту особенность выполняя разработку GLib, даже если компилятор поддерживает ELF видимость атрибутов. Опция --disable-visibility позволяет делать это.

--disable-gtk-doc и --enable-gtk-doc По умолчанию скрипт configure попытается автоматически определить установлен ли пакет gtk-doc. Если да, то использует его для извлечения и сборки документации для GLib библиотеки. Эти опции используются для непосредственного контроля должен ли применяться gtk-doc или нет. Если он не используется, то будут установлены предварительно сгенерированные HTML файлы вместо сборки их на вашей машине.

--disable-man и --enable-man По умолчанию скрипт configure попытается автоматически определить установлен ли xsltproc и необходимые таблицы стилей Docbook. Если установлены, то они будут использованы для пересборки включенных страниц руководства (man pages) из XML исходников. Эти опции могут использоваться для непосредственного контроля должны ли страницы руководства (man pages) пересобираться или нет. Дистрибутив включает предварительно сгенерированные man страницы.





Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру