Компиляция библиотек GTK+
Компиляция библиотек GTK+ — Как скомпилировать сам GTK+
Создание GTK+ на системах, подобных UNIX
В этой главе рассматривается создание и установка GTK+ на системах UNIX и подобных системах, таких как Linux. Компиляция GTK+ на Microsoft Windows отличается по деталям и несколько сложнее, так как необходимые инструменты не включены в операционную систему.
Прежде чем углубиться в детали компиляции GTK+, следует отметить, что во многих случаях доступны двоичные пакеты GTK+, предварительно скомпилированные для вашей операционной системы, либо от вашего поставщика операционной системы, либо от независимых источников. Если такой набор пакетов доступен, его установка позволит начать программирование с GTK+ гораздо быстрее, чем самостоятельное построение. На самом деле, GTK+ возможно уже установлен на вашей системе.
В системах, подобных UNIX, GTK+ использует стандартную систему сборки GNU, используя autoconf для конфигурации пакета и решения проблем переносимости, automake для создания makeфайлов, соответствующих стандартам кодирования GNU, и libtool для построения общих библиотек на нескольких платформах.
Если вы собираете GTK+ из распределенных исходных пакетов, вам не нужно устанавливать эти инструменты; необходимые компоненты инструментов уже включены в исходные пакеты. Но полезно немного знать, как работают пакеты, использующие эти инструменты. Исходный пакет распространяется в виде файла tar.bz2 или tar.xz, который вы распаковываете в каталог, полном исходных файлов следующим образом:
tar xvfj gtk+-3.2.0.tar.bz2
tar xvfJ gtk+-3.2.0.tar.xz
В созданном каталоге верхнего уровня будет скрипт оболочки с именем configure, который вы затем запускаете, чтобы преобразовать шаблонные makeфайлы, называемые Makefile.in в пакете, и создать makeфайлы, настроенные для вашей операционной системы. Скрипт configure может принимать различные аргументы командной строки, чтобы определить, как пакет будет построен и установлен. Наиболее полезный аргумент — аргумент --prefix, который определяет, где будет установлен пакет. Чтобы установить пакет в /opt/gtk, вы запустите configure следующим образом:
./configure --prefix=/opt/gtk
Полный список опций можно найти, запустив configure с аргументом --help. В общем, значения по умолчанию верны и их следует доверять. После запуска configure, вы запускаете команду make для сборки пакета и его установки.
make
make install
Если у вас нет разрешения на запись в каталог, в который вы устанавливаете, вам может потребоваться временно переключиться на root, прежде чем запускать make install. Кроме того, если вы устанавливаете в системный каталог, на некоторых системах (например, Linux) вам необходимо запустить ldconfig после make install, чтобы новые установленные библиотеки были найдены.
Несколько переменных среды полезны для установки перед запуском configure. CPPFLAGS содержит параметры для передачи компилятору C и используется для указания компилятору, где искать файлы включения. Переменная LDFLAGS используется аналогичным образом для компоновщика. Наконец, переменная среды PKG_CONFIG_PATH содержит путь поиска, который pkg-config (см. ниже) использует при поиске файлов, описывающих, как компилировать программы, используя различные библиотеки. Если вы устанавливаете GTK+ и его зависимости в /opt/gtk, вы можете установить эти переменные следующим образом:
CPPFLAGS="-I/opt/gtk/include"
LDFLAGS="-L/opt/gtk/lib"
PKG_CONFIG_PATH="/opt/gtk/lib/pkgconfig"
export CPPFLAGS LDFLAGS PKG_CONFIG_PATH
Вам также может потребоваться установить переменную среды LD_LIBRARY_PATH, чтобы системный динамический компоновщик мог найти новые установленные библиотеки, и переменную среды PATH, чтобы утилитарные двоичные файлы, установленные различными библиотеками, были найдены.
LD_LIBRARY_PATH="/opt/gtk/lib"
PATH="/opt/gtk/bin:$PATH"
export LD_LIBRARY_PATH PATH
Зависимости
Прежде чем вы сможете скомпилировать набор инструментов GTK+, вам необходимо установить различные другие инструменты и библиотеки на вашей системе. Два инструмента, необходимые во время процесса сборки (в отличие от инструментов, используемых при создании GTK+, упомянутых выше, таких как autoconf), — это pkg-config и GNU make.
pkg-config — это инструмент для отслеживания флагов компиляции, необходимых для библиотек, используемых библиотеками GTK+. (Для каждой библиотеки в стандартном месте устанавливается небольшой файл
.pcтекстового формата, содержащий флаги компиляции, необходимые для этой библиотеки, а также информацию о версии.)Makeфайлы GTK+ в основном будут работать с различными версиями make, однако, есть несколько несовместимостей, поэтому команда GTK+ рекомендует установить GNU make, если у вас его еще нет на вашей системе, и использовать его. (Он может называться gmake вместо make.)
Некоторые из библиотек, от которых зависит GTK+, поддерживаются командой GTK+: GLib, GdkPixbuf, Pango, ATK и GObject Introspection. Другие библиотеки поддерживаются отдельно.
Библиотека GLib предоставляет основные неграфические функции, такие как высокоуровневые типы данных, обработку Unicode и систему объектов и типов для программ на C. Она доступна на сайте FTP GTK+ или здесь.
Библиотека GdkPixbuf предоставляет средства для загрузки изображений в различных форматах файлов. Она доступна здесь.
Pango — это библиотека для обработки международного текста. Она доступна здесь.
ATK — это набор средств для обеспечения доступности. Он предоставляет набор универсальных интерфейсов, позволяющих технологиям обеспечения доступности, таким как программы чтения с экрана, взаимодействовать с графическим интерфейсом пользователя. Она доступна здесь.
Gobject Introspection — это платформа для предоставления данных интроспекции для языковых привязок. Она доступна здесь.
Внешние зависимости
Библиотека GNU libiconv необходима для сборки GLib, если на вашей системе нет функции
iconv()для преобразования между кодировками символов. Большинство современных систем должны иметьiconv().Библиотека libintl из пакета GNU gettext необходима, если на вашей системе нет функциональности
gettext()для обработки баз данных перевода сообщений.Для сборки Pango и GTK+ необходимы библиотеки системы окон X. Они должны быть уже установлены на вашей системе, но возможно, вам потребуется установить среду разработки для этих библиотек, предоставляемую вашим поставщиком операционной системы.
Библиотека fontconfig предоставляет Pango стандартный способ поиска шрифтов и сопоставления их с именами шрифтов.
Cairo — это графическая библиотека, поддерживающая векторную графику и композицию изображений. Pango и GTK+ используют cairo для всех своих рисунков.
libepoxy — библиотека, которая абстрагирует различия между различными библиотеками OpenGL. GTK+ использует её для кроссплатформенной поддержки OpenGL.
Для построения GTK+ с бэкендом Wayland необходимы библиотеки Wayland.
Пакет shared-mime-info не является жесткой зависимостью GTK+, но он содержит определения типов MIME, которые используются GIO и косвенно GTK+. gdk-pixbuf будет использовать GIO для обнаружения типа MIME, если это возможно. Для этого shared-mime-info должен быть установлен и
XDG_DATA_DIRSдолжен быть установлен соответствующим образом во время конфигурации. В противном случае, gdk-pixbuf использует встроенное обнаружение типа MIME.
Сборка и тестирование GTK+
Сначала убедитесь, что установлены необходимые внешние зависимости: pkg-config, GNU make, библиотеки JPEG, PNG и TIFF, FreeType, а также, при необходимости, libiconv и libintl. Для получения подробной информации о сборке этих пакетов см. документацию, поставляемую с отдельными пакетами. В Linux системе, скорее всего, все это уже установлено, за исключением pkg-config.
Затем следует собрать и установить библиотеки GTK+ в следующем порядке: GLib, Pango, ATK, затем GTK+. Для каждой библиотеки следуйте шагам, описанным выше в configure, make, make install. Если повезёт, всё пройдёт гладко, и вы будете готовы начать компиляцию собственных приложений GTK+. Вы можете проверить установку GTK+, запустив программу gtk3-demo, устанавливаемую GTK+.
Если один из configure скриптов завершится ошибкой или при выполнении make возникнет ошибка, внимательно изучите сообщения об ошибках; они часто содержат полезную информацию о том, что пошло не так. Когда configure завершится ошибкой, дополнительная информация, например, ошибки, с которыми столкнулась тестовая компиляция, находится в файле config.log. Обычно, изучив последние несколько сотен строк этого файла, можно понять причину ошибки. Если ничего не помогает, можно обратиться за помощью на почтовый список gtk-list. См. Почтовые списки и сообщения об ошибках(3) для получения дополнительной информации.
Дополнительные параметры конфигурации
В дополнение к стандартным параметрам, скрипт configure для библиотеки GTK+ поддерживает ряд дополнительных аргументов. (Аргументы командной строки для других библиотек GTK+ описаны в документации, поставляемой с этими библиотеками.)
configure [ --disable-modules | --enable-modules ] [[--with-included-immodules=MODULE1,MODULE2,...]] [ --enable-debug=[no/minimum/yes] ] [ --disable-Bsymbolic | --enable-Bsymbolic ] [ --disable-xkb | --enable-xkb ] [ --disable-xinerama | --enable-xinerama ] [ --disable-gtk-doc | --enable-gtk-doc ] [ --disable-cups | --enable-cups ] [ --disable-papi | --enable-papi ] [ --enable-xinput | --disable-xinput ] [ --enable-packagekit | --disable-packagekit ] [ --enable-x11-backend | --disable-x11-backend ] [ --enable-win32-backend | --disable-win32-backend ] [ --enable-quartz-backend | --disable-quartz-backend ] [ --enable-broadway-backend | --disable-broadway-backend ] [ --enable-wayland-backend | --disable-wayland-backend ] [ --enable-mir-backend | --disable-mir-backend ] [ --enable-introspection=[no/auto/yes] ] [ --enable-installed-tests | --disable-installed-tests ]
--disable-modules и --enable-modules. Обычно GTK+ пытается собрать модули методов ввода как небольшие общие библиотеки, которые загружаются по мере необходимости. Аргумент --disable-modules указывает, что они должны быть собраны статически в библиотеку GTK+ вместо этого. Это полезно для людей, которым нужно создавать статически связанный исполняемый код.
Если ни --disable-modules ни --enable-modules не указаны, то скрипт configure попытается автоматически определить, работают ли общие модули на вашей системе.
--with-included-immodules. Этот параметр позволяет указать, какие модули методов ввода вы хотите включить непосредственно в общую библиотеку GTK+, в отличие от их сборки как загружаемых модулей.
--enable-debug. Включает различные уровни отладки. Установка значения 'no' отключает g_assert(), g_return_if_fail(), g_return_val_if_fail() и все проверки преобразований между различными типами объектов. Установка значения 'minimum' отключает только проверки преобразований. Установка значения 'yes' включает отладку во время выполнения. По умолчанию используется 'minimum'. Обратите внимание, что 'no' быстро, но опасно, поскольку это может дестабилизировать даже в основном без ошибок программное обеспечение, изменяя эффект многих ошибок с простых предупреждений на фатальные сбои. Поэтому --enable-debug=no не следует использовать для стабильных релизов GTK+.
--disable-Bsymbolic и --enable-Bsymbolic. Параметр --disable-Bsymbolic отключает использование флага линковщика -Bsymbolic-functions. Это необходимо только если вы хотите переопределить функции GTK+, используя LD_PRELOAD.
--enable-explicit-deps и --disable-explicit-deps. Если --enable-explicit-deps указан, GTK+ запишет полный набор библиотек, от которых зависит GTK+, в свои .pc файлы, которые будут использоваться при компоновке программ, зависящих от GTK+. В противном случае GTK+ будет включать только собственные библиотеки GTK+ и будет полагаться на средства определения зависимостей библиотек системы для подгрузки других библиотек. По умолчанию GTK+ отключает явные зависимости, если не обнаруживает, что они необходимы в системе. (Если вы укажете --enable-static для принудительной сборки статических библиотек, то явные зависимости будут записаны, так как зависимости библиотек не работают для статических библиотек.) Указание --enable-explicit-deps или --enable-static может привести к проблемам совместимости при изменении версий библиотек, от которых зависит GTK+, и их следует избегать, если это возможно.
--disable-xkb и --enable-xkb. По умолчанию скрипт configure пытается автоматически определить, поддерживается ли расширение XKB библиотеками X, с которыми связан GTK+. Эти параметры позволяют явно управлять тем, будет ли GTK+ поддерживать расширение XKB.
--disable-xinerama и --enable-xinerama. По умолчанию скрипт configure будет пытаться связаться с библиотеками Xinerama, если они найдены. Эти параметры позволяют явно контролировать, следует ли использовать Xinerama.
--disable-xinput и --enable-xinput. Управляет тем, будет ли GTK+ построен с поддержкой расширения XInput или XInput2. Эти расширения предоставляют расширенный интерфейс для устройств ввода, таких как графические планшеты. При включении этой поддержки специально написанные программы GTK+ могут получить доступ к субпиксельным позициям, нескольким одновременным устройствам ввода и дополнительным «осям», предоставляемым устройством, таким как информация о давлении и наклоне.
--disable-gtk-doc и --enable-gtk-doc. Пакет gtk-doc используется для генерации справочной документации, включенной в GTK+. По умолчанию поддержка gtk-doc отключена, потому что она требует установки различных дополнительных зависимостей. Если у вас установлен gtk-doc и вы изменяете GTK+, вы можете включить поддержку gtk-doc, передав --enable-gtk-doc. Если она не включена, будут установлены предварительно сгенерированные HTML-файлы, поставляемые с GTK+.
--disable-cups и --enable-cups. По умолчанию скрипт configure будет пытаться собрать бэкенд печати cups, если найдены библиотеки cups. Эти параметры позволяют явно управлять тем, следует ли собирать бэкенд печати cups.
--disable-papi и --enable-papi. По умолчанию скрипт configure будет пытаться собрать бэкенд печати papi, если найдены библиотеки papi. Эти параметры позволяют явно управлять тем, следует ли собирать бэкенд печати papi.
--disable-packagekit и --enable-packagekit. По умолчанию скрипт configure будет пытаться собрать поддержку PackageKit для диалога «Открыть с помощью», если найдены библиотеки PackageKit. Эти параметры позволяют явно управлять тем, следует ли собирать поддержку PackageKit.
--enable-x11-backend, --disable-x11-backend, --enable-win32-backend, --disable-win32-backend, --enable-quartz-backend, --disable-quartz-backend, --enable-broadway-backend, --disable-broadway-backend, --enable-wayland-backend, --disable-wayland-backend --enable-mir-backend, и --disable-mir-backend. Включает определенные бэкэнды для GDK. Если ни один из этих параметров не задан, по умолчанию будет включен бэкенд x11, за исключением Windows, в этом случае по умолчанию используется win32. Если какой-либо бэкенд явным образом включен или отключен, никакой другой бэкенд не будет включен автоматически. Другие поддерживаемые бэкэнды — quartz бэкенд для OS X.
--enable-introspection. Сборку с или без поддержки интроспекции. По умолчанию используется 'auto'.
--enable-installed-tests или --disable-installed-tests. Устанавливать или нет тесты в системе. Если включено, тесты и их данные устанавливаются в ${libexecdir}/gtk+/installed-tests. Метаданные для тестов устанавливаются в ${prefix}/share/installed-tests/gtk+. Для запуска установленных тестов можно использовать gnome-desktop-testing-runner.
© 2005–2020 The GNOME Project
Licensed under the GNU Lesser General Public License version 2.1 or later.
https://developer.gnome.org/gtk3/3.22/gtk-building.html