Компилиране на пакета GLib

Компилиране на пакета GLib — Как сами да компилирате GLib

Изграждане на библиотека на UNIX

В UNIX GLib използва стандартната система за изграждане на GNU, autoconf за проблеми с конфигурирането на пакета и преносимостта, automake за създаване на makefiles, което се прави с GNU стандартите за кодиране, и libtool за изграждане на споделени библиотеки на множество платформи. Нормалната последователност за изграждане и инсталиране на GLib библиотека е:

Стандартните опции, предоставени от GNU autoconf, могат да бъдат предадени на скрипта за конфигуриране. Моля, вижте документацията на autoconf или стартирайте ./configure --help за информация относно стандартните опции.

Документацията на GTK+ съдържа допълнителни подробности за процеса на изграждане и как да му се повлияе.

Зависимости

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

pkg-config е инструмент за проследяване на флаговете за компилация, необходими за библиотеките, използвани от библиотеката GLib. (За всяка библиотека .pc текстов файл се инсталира на стандартно място, което съдържа флаговете за компилация, необходими за тази библиотека и нейния номер на версия.) Версията на pkg-config, необходима за изграждане на GLib, е посочена в директорията за зависимости на GTK+ FTP сайта.

GTK+ make-файловете ще работят с различни версии на make, но има тенденция за леки несъвместимости, така че екипът за разработка на GTK+ препоръчва да инсталирате GNU make, ако вече не е инсталиран на вашата система и да го използвате. (Може да се нарича gmake вместонаправи .)

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

Библиотеката GNU libiconv е необходима за изграждане на GLib, ако вашата система няма функция iconv() за преобразуване на знаци в различни кодировки. Съвременните системи трябва да имат iconv(), но някои наследени системи нямат iconv(). На такива системи трябва да инсталирате библиотеката libiconv. Може да бъде намерен на: http://www.gnu.org/software/libiconv.

Ако вашата система има имплементация на iconv(), но вместо това искате да използвате libiconv, тогава трябва да укажете опцията --with-libiconv на скрипта за конфигуриране. Това ще принуди използването на libiconv.

Имайте предвид, че ако имате инсталиран libiconv в пътя за търсене по подразбиране (напр. /usr/local/), но не го включите, ще получите грешка по време на GLib компилация, защото iconv.h на инсталирания libiconv скрива системната iconv.

Ако използвате родната реализация на Solaris на iconv вместо 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 е необходима, ако вашата система няма функции gettext() за обработка на базата от преводими съобщения.

Реализацията на нишка е необходима, ако трябва да изградите GLib без поддръжка на нишка, което не се препоръчва. Поддръжката на нишки в GLib може да се основава на внедряване на естествени нишки,например POSIX нишки, DCE нишки или Solaris нишки.

Допълнителни опции за конфигурация

В допълнение към обичайните опции скриптът за конфигуриране в библиотеката GLib поддържа следните аргументи:

конфигуриране [[--enable-debug=[nomimimumyes]]] [[--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 .Разрешава различни количества поддръжка за отстраняване на грешки. Задаването му на „не“ деактивира g_assert(), g_return_if_fail(), g_return_val_if_fail() и прехвърлянето на контрол между различни типове обекти. Задаването му на „минимум“ деактивира само преобразуването на типове. Задаването му на „да“ позволява отстраняване на грешки по време на изпълнение. Стойността по подразбиране е „минимум“. Не забравяйте, че „не“ ускорява нещата, но е опасно, тъй като има тенденция да дестабилизира дори софтуер без грешки, превръщайки ефекта от малките грешки във фатални сривове. Следователно --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 са предимно неефективни.

GSignal деактивира цялото кеширане (потенциално много бавно).

GType вече не зачита полетата n_preallocs на GTypeInfo.

Квадратче за отметка GBSearchArrayG_BSEARCH_ALIGN_POWER2 не функционира.

--disable-threads и --enable-threads .Ако компилирате GLib по начин, който не е безопасен за нишки, тогава GLib ще бъде малко по-бърз. Това обаче не се препоръчва, тъй като много програми приемат, че GLib е безопасен за нишки.

--with-threads .Указва използването на многонишкова реализация.

'posix' и 'dce' могат да се използват взаимозаменяемо за обозначаване на различни версии на Posix нишки. Скриптът за конфигуриране ще се опита да определи кой е инсталиран.

'няма' означава, че GLib ще запази нишката, но няма реализирана резба по подразбиране. Това трябва да се определи чрез g_thread_init() от програмиста.

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

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

--disable-gtk-doc и --enable-gtk-doc .По подразбиране скриптът за конфигуриране ще се опита автоматично да открие дали gtk-doc е инсталиран. Ако да, използвайте го, за да извлечете и изградите документацията за библиотеката GLib. Тези опции се използват за директен контрол дали gtk-doc трябва да се използва или не. Ако не се използва, предварително генерираните HTML файлове ще бъдат инсталирани, вместо да се създават на вашата машина.

--disable-man и --enable-man .По подразбиране скриптът за конфигуриране ще се опита автоматично да открие дали xsltproc и необходимите таблици със стилове на Docbook са инсталирани. Ако са зададени, те ще бъдат използвани за повторно изграждане на включените страници с ръководство от XML източници. Тези опции могат да се използват за директен контрол дали man страниците трябва да бъдат прекомпилирани или не. Дистрибуцията включва предварително генерирани страници с ръководство.