Компиляция библиотек 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текстовый файл в стандартном расположении, который содержит флаги компиляции, необходимые для этой библиотеки, а также информацию о версии.)Makefile 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()для обработки баз данных перевода сообщений.Библиотеки системы окон X необходимы для сборки Pango и GTK+. Вы должны уже иметь их на своей системе, но возможно, вам нужно будет установить среду разработки для этих библиотек, предоставляемую вашим производителем операционной системы.
Библиотека fontconfig предоставляет Pango стандартный способ поиска шрифтов и сопоставления их с именами шрифтов.
Библиотека Cairo — это графическая библиотека, поддерживающая векторную графику и композицию изображений. Pango и GTK+ используют cairo для всего рисования.
libepoxy — это библиотека, которая абстрагирует различия между различными библиотеками OpenGL. GTK+ использует её для поддержки OpenGL на разных платформах.
Библиотеки Wayland необходимы для сборки GTK+ с помощью бэкэнда 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. Включает различные уровни поддержки отладки. Установка значения «нет» отключает g_assert(), g_return_if_fail(), g_return_val_if_fail() и все проверки преобразования между различными типами объектов. Установка значения «минимальный» отключает только проверки преобразований. Установка значения «да» включает отладку во время выполнения. Значение по умолчанию — «минимальный». Обратите внимание, что «нет» быстро, но опасно, так как это может дестабилизировать даже в основном без ошибок программное обеспечение, превращая многие ошибки из простых предупреждений в фатальные сбои. Таким образом, --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. Если какой-либо бэкэнд явно включен или отключен, другие платформы не будут автоматически включены.
--enable-introspection. Сборка с поддержкой интроспекции или без неё. Значение по умолчанию — «автоматически».
--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.20/gtk-building.html