Compiling the GLib package

Compiling the GLib Package — Як самостійно скомпілювати GLib

Складання бібліотеки в UNIX

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

Стандартні опції представлені 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=[nominimumyes]]] [[--disable-gc-friendly] [--enable-gc-friendly]] [[--disable-mem-pools] [--enable-mem -pools]] [[--disable-threads] [--enable-threads]] [[--with-threads=[noneposixdcewin32]]] [[--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 очищає вузол, який має вказівник на значення вузлів, а також ліві та праві підвузли.

Починаючи з очищення пам'яті, значення --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() не доступні.

GMemChunk s в основному не ефективні.

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) перезбиратися чи ні. Дистрибутив включає попередньо згенеровані сторінки.