Справочное описание GLib |
---|
Компиляция пакета GLibCompiling the GLib Package — Как самостоятельно скомпилировать GLib |
В 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 страницы.