Поток сознания, структурированный для более удобного восприятия... Прежде всего для сброса мыслей и впечатлений, которые оттягивают на себя слишком много ресурсов.

пятница, 15 октября 2010 г.

Кросс-компиляция wxWidgets с поддержкой GDI+ с помощью MinGW

где-то в районе город Омск, Омская область, Россия
  Сегодня вкратце расскажу о том, как можно собрать wxWidgets для винды под Линуксом. Вернее, как собрать либу для винды под Лиуксом — это, пожалуй, неинтересно. :) Лучше я скажу, что делать, если Вам приспичило собрать wxWidgets с поддержкой GDI+.
  Собственно, вся инфа о подготовке и процессе кросс-компиляции доступным языком описана здесь: Cross-Compiling Under Linux, Cross-Compiling Windows Resources и Cross Compiling wxWidgets Applications on Linux. Всё весьма тривиально: ставится MinGW32 и собирается всё, что нужно. :) С wxWidgets тоже абсолютно ничего страшного нет: нужно распаковать архив с сырцами куда-нибудь в удобное место, запустить скрипт ./configure с нужными параметрами (которые можно посмотреть, сказав ./configure --help | less), после чего вызвать make и идти пить чай (или кофе — в зависимости от производительности машины). После того, как процесс сборки библиотеки успешно — надеюсь ;) — завершится, можно спуститься в каталог contrib и тоже сделать make. После этого в верхнем каталоге можно сделать make install, можно checkinstall, а можно всё, что сгенерилось в lib, руками перенести куда надо.
  В общем, как обычно, всё было бы просто замечательно, если бы я не скормил конфигуратору опцию --enable-graphics_ctx, которая потянула за собой ту самую GDI+... В результате на файле graphics.cpp компилятор с пугающей стабильностью останавливался, говоря о том, что, дескать, ни один класс из GDI+ не был определён. В принципе, логично, поскольку в стандартном MinGW никакого GDI+ не существует. В нескольких местах (Successful compile of simple GDI+ program using modified headers, GDIplus Programming With MinGW, Adding GDI+ Headers to MinGW, Прикручиваем GDI+ к wxWidgets под MinGW) я нашёл кратенькие инструкции по подкладыванию хэдеров и библиотеки в дерево MinGW, а главное — там были ссылки на архивы с нужными файлами. Везде говорилось о том, что, дескать, нужно как-то менять заголовки.В принципе, если брать не оригинальные файлы, а уже приведённые в человеческий вид, то внутри менять ничего не нужно... А вот с именами как раз начались глюки. :/
  Поскольку винда не обращает внимания на регистр в названии файлов, считается, что их можно обзывать как угодно. Для *nix'ов это, естественно, не так. Во-первых, оказалось, что нужно привести все файлы к виду "Gdiplus*.h". Делается это одной командой:
rename 's/GdiPlus/Gdiplus/' *.h
Но это, оказывается, ещё не всё... Есть ещё пара файлов, на которые ссылается Gdiplus.h, и регистр букв которых не соответствует тому, что там написано. Это GdiplusimageAttributes.h, в котором нужно Image написать с большой буквы, и GdiplusMetaFile.h, в котором уже наоборот слово File надо написать с маленькой буквы. В принципе, пофигу, где и что менять: можно было с таким же успехом заменить буквы и в include'ах в Gdiplus.h, но изменить названия файлов мне кажется более логичным и универсальным.
  И вот, после всех этих шаманских действий, wxWidgets наконец-то могут быть спокойно собраны в любой нужной конфигурации. :)

Комментариев нет:

Отправить комментарий