Библиотека инструментов wxWidgets. Сборка и пример использования

от автора

В продолжение поста (новости) wxWidgets. Мелочь, но приятно, ловите печеньку.

Картинка взята с ресурса: ru.wikipedia.org, автор: Bryan Petty.

Выдержка из Wiki: wxWidgets — это кросс-платформенная библиотека инструментов с открытым исходным кодом для разработки кроссплатформенных на уровне исходного кода приложений, в частности для построения графического интерфейса пользователя (GUI).

Библиотека имеет набор классов для работы с графическими изображениями, HTML, XML документами, архивами, файловыми системами, процессами, подсистемами печати, мультимедиа, сетями, классы для организации многопоточности, отладки, отправки дампов и множество других инструментов.

Внимание! Под катом трафик!

Тройку лет назад заинтересовался кросс-платформенным программированием с использованием выше озаглавленной библиотеки. Каждый раз при сборке этой библиотеки возникало куча проблем. Проблемы не были связанны с тем, что библиотека имела какие-то существенные баги, а были связаны стем, что при использовании подобных инструментов требующих компиляции (сборки), необходимо внимательно относится к сопровождающей литературе.
Если говорить понятным языком, то необходимо внимательно читать мануалы, readme-файлы, FAQ и т.д…

Хотя статей по сборке и использованию wxWidgets достаточно в сети, все равно считаю нужным поделится своим опытом, постараюсь объяснить шаги, которые приводят к положительному результату, и описать что к чему, чтобы разработчики только начинающие использовать wxWidgets в своих проектах, меньше наступали на грабли, и сразу перешли к использованию всех функциональных возможностей этой библиотеки.
И так, поехали.
Сборку библиотеки будем производить в операционной системе Windows 7 Professional x32 SP1. Что касается других OS, то могу смело заявить, что сборка wxWidgets под Ubuntu Desktop 12.04, не вызывает особых сложностей, все прекрасно собирается. Для сборки под GNU/Linux, можно воспользоваться этим мануалом.

В качестве IDE (редактора кода и автоматизации сборки), будем использовать Code::Blocks. Думаю многие уже о нем слышали, поэтому не будем вдаваться в подробности. Упомяну лишь, что C::B – достаточно мощный инструмент для написания больших приложений, и напрямую «заточен» под использование библиотеки инструментов wxWidgets, т.к. сам собран с использованием этой библиотеки.

1) Установка компилятора, средств отладки и предварительная настройка:
Средства отладки (дебагер), обычно устанавливаются по умолчанию вместе с компилятором, в случае компиляторов GCC и некоторых других, — это файл со скромным названием GDB.

FAQ: Первые грабли с которыми сталкиваются начинающие разработчики, — это неверная установка используемого для сборки библиотеки компилятора. Большинство устанавливают MinGW вместо TDM-GCC, на котором собственно и ведется разработка wxWidgets под Windows.

Ссылка: TDM-GCC это альфа сборка новых релизов gcc собранных для mingw
текущий официальный выпуск mingw включает в себя gcc 3 и более новых версий gcc раньше разработчиками mingw не выкладывалось. Поэтому один из разработчиков стал собирать новые gcc и выкладывать пакеты предназначенные для замены gcc в установленном mingw. Сейчас gcc 4.5 есть и у mingw http://sourceforge.net/downloads/mingw/MinGW/BaseSystem/GCC/Version4/ хз чем они отличаются…

Стоить отметить, что при установке MinGW, библиотека может собраться, но с очень малой вероятностью, скорее всего в конце сборки, после многоминутного ожидания, вы получите сообщение об ошибке вроде этой:
if not exist ..\..\lib\gcc_lib\mswud mkdir ..\..\lib\gcc_lib\mswud g++ -c -o gcc_mswud\monolib_treectrl.o -g -O0 -mthreads -DHAVE_W32API_H -D__WXMSW__ -D_UNICODE -I..\..\lib\gcc_lib\mswud -I..\..\include -W -Wall -DWXBUILDING -I..\..\src\tiff\libtiff -I..\..\src\jpeg -I..\..\src\png -I..\..\src\zlib -I..\..\src\regex -I..\..\src\expat\lib -I..\..\src\stc\scintilla\include -I..\..\src\stc\scintilla\lexlib -I..\..\src\stc\scintilla\src -D__WX__ -DSCI_LEXER -DLINK_LEXERS -DwxUSE_BASE=1 -Wno-ctor-dtor-privacy -MTgcc_mswud\monolib_treectrl.o -MFgcc_mswud\monolib_treectrl.o.d -MD -MP ../../src/msw/treectrl.cpp makefile.gcc:9395: recipe for target 'gcc_mswud\monolib_treectrl.o' failed

Переходим на официальный сайт компилятора TDM-GCC в раздел загрузки, скачиваем и устанавливаем последнюю стабильною версию соответствующую разрядности нашей операционной системы (x32 или x64). В нашем случае это: tdm-gcc-4.8.1-3.exe.
Далее стандартная процедура: запускаем мастер установки, и устанавливаем компилятор с опциями по умолчанию.

Совет: При установке каких либо программ, библиотек, распаковки пакетов и т.д., лучше всего использовать, в мастере установки программ, настройки (опции) по умолчанию. Поверьте, это вызовет намного меньше забот, и меньше плясок с бубном вокруг библиотек и программ. Это касается, библиотек, программ, и всевозможных компиляторов.

Настройка компилятора заключается в том, что необходимо добавить в системную переменную окружения Path, путь к бинарным сборкам компилятора, если этого не сделал мастер установки по умолчанию. Обычно это: C:\TDM-GCC-32\bin (если директорией установки (распаковки) был выбран корневой католог диска C:\);

Проверка: Проверка работоспособности будет заключаться в следующих действиях: запускаем командную строку (CMD), и просто выполняем команду: mingw32-make -v соответственно видим версию сборки make — компоновщика. Должно появится чтото вроде этого:

2) Загрузка, распаковка и сборка библиотеки wxWidgets:
Переходим на официальный сайт библиотеки wxWidgets в раздел загрузки, скачиваем и распаковываем последнюю стабильною версию библиотеки для OS Windows. В нашем случае это: wxMSW-Setup-3.0.0.exe (Windows Installer).
Далее стандартная процедура: запускаем мастер распаковки, и распаковываем библиотеку с опциями по умолчанию.
Предварительная настройка компилятора заключается в том, что необходимо добавить системную переменную окружения WXWIN, которая будет содержать путь к корневому каталогу библиотеки. Обычно это: C:\wxWidgets-3.0.0 (если директорией установки (распаковки) был выбран корневой каталог диска C:\);

Собственно приступаем к сборке. Запускаем командную строку (CMD), и выполняем по порядку следующие команды (дожидаясь завершение выполнения каждой):

cd %WXWIN%\build\msw
mingw32-make -f makefile.gcc clean
mingw32-make -f makefile.gcc BUILD=debug SHARED=0 MONOLITHIC=0 UNICODE=1 WXUNIV=0
mingw32-make -f makefile.gcc BUILD=release SHARED=0 MONOLITHIC=0 UNICODE=1 WXUNIV=0

Обычно количество опций сборки не превышает указанных.
Разберем назначение указанных опций:

BUILD — сборка библиотеки в режиме: debug (отладки) или release (резизной версии приложения);
SHARED — тип сборки библиотеки: 0 — static статическая сборка, 1 — dynamic динамическая сборка соответственно;
MONOLITHIC — собрать все библиотеки в «одну»: 1 — да, 0 — нет, удобно на первых этапах знакомства с библиотекой;
UNICODE — Поддержка unicode: 1 — да, 0 -нет;
WXUNIV — собрать этементы интерфейса общими для любой OS: 1 — да, 0 — нет. (или сборка собственных элементов управления для операционных систем где эти элементы отсутствуют).

Процесс сборки будет похож на этот скриншот:

3) Загрузка, установка и настройка IDE Code::Blocks:
Переходим на официальный сайт программы Code::Blocks в раздел загрузки, скачиваем и устанавливаем последний стабильный бинарный релиз программы для OS Windows. В нашем случае это: codeblocks-13.12-setup.exe. Необходимо загружать версию без компилятора, т.к. компилятор мы установили ранее, и скорее всего он «свежее» компилятора который идет в поставке с C::B.

FAQ, Note: The codeblocks-13.12mingw-setup.exe file includes the GCC compiler and GDB debugger from TDM-GCC (version 4.7.1, 32 bit). The codeblocks-13.12mingw-setup-TDM-GCC-481.exe file includes the TDM-GCC compiler, version 4.8.1, 32 bit. While v4.7.1 is rock-solid (we use it to compile C::B), v4.8.1 is provided for convenience, there are some known bugs with this version related to the compilation of Code::Blocks itself.

IF UNSURE, USE «codeblocks-13.12mingw-setup.exe»!

Примечание: Общее время компиляции занимает в среднем порядка 30-40 минут. Да-да, библиотека не такая уж и маленькая, имеет кучу классов.

Далее стандартная процедура, запускаем мастер установки, и устанавливаем программу с опциями по умолчанию.

Настройки среды разработки сводятся к настройке компилятора по умолчанию. Обычно при первом запуске C::B сам выдаст диалог для выбора основного компилятора из всех найденных (выбираем TDM-GCC), но иногда этот диалог может не появлятся. Тогда запускаем C::B и переходим по пунктам главного меню к настройкам компилятора: Settings-->Compiler Вкладка: Toolchain executables и по анологии со скриншотом настраиваем C::B.

Проверка: Для проверки работоспособности среды разработки и проверки правельной настройки компиляторов, необходимо в C::B создать тестовый консольный проект, следующим образом:
1) Запускаем C::B (если он не запушен ранее);
2) Переходим по пунктам меню: File-->New-->Project в открывшимся диологе (Project) выбираем Console application и нажимаем кнопку [Go];
3) Следуем подсказкам диалога предварительной настройки проекта, задаем параметры проекта (имя, расположение и т.д), нажимаем кнопку [Next] затем [Finish];
Открылся редактор кода проекта. Если нет то Выбираем пункты главного меню: View-->Manager, View-->Toolbars-->Compiler. Открываем исходный код в дереве менеджера main.cpp,

должен быть такой код:

если необходимо редактируем.

4) Выбираем пункт главного меню: Build-->Build and Run, и наблюдаем наше скомпилированное приложение:

4) Создание тестового проекта с использованием wxWidgets:
Запускаем C::B если он небыл запущен, и переходим по пунктам главного меню: File-->New-->Projects из всех типов создаваемого проекта, выбираем wxWidgets project, нажимаем кнопку [Go].

В появившимся окне предварительной настройки проекта, следуем подсказкам, а именно:
1) Нажимаем кнопку [Next];

2) Выбираем тип используемой библиотеки wxWidgets 3.0.x, нажимаем кнопку [Next];

3) Задаем параметры проекта имя, путь к исходникам и т.д., нажимаем кнопку [Next];

4) Задаем авторов проекта (это можно пропустить), нажимаем кнопку [Next];
5) Выбираем дизайнер форм wxSmith (т.к. wxFormBuilder — у нас предварительно не установлен), также выбираем тип создаваемого приложения Frame Based, нажимаем кнопку [Next];

6) Очень внимательно отнесемся к локальной переменной, и вместо $(wx) зададим $(WXWIN), нажимаем кнопку [Next];

7) выбираем компилятор (обычно по умолчанию) нажимаем кнопку [Next];

8) в случае нашей сборки (статической-не монолитной), параметры следующего окна должны быть такими:

нажимаем кнопку [Next] и соглашаемся с диалогами.
9) Выбираем необходимые нам классы с которыми мы хотим работать.
В зависимости от способа сборки, статическая-динамическая, монолитная и ли нет следующего окна может не быть.

нажимаем кнопку [Finish];

Глобальные переменные проекта должны быть настроены следующим образом (Settings-->Global variables):

Настройки проекта должны выглядеть примерно так (Project-->Build options):
Окно Project build options (wx_test) [Вкладка Compiler settings - Other options]:

-pipe -mthreads -Winvalid-pch -include wx_pch.h

Окно Project build options (wx_test) [Вкладка Compiler settings - Other options]:

__GNUWIN32__ __WXMSW__ wxUSE_UNICODE WX_PRECOMP

Окно Project build options (wx_test) [Вкладка Linker settings]:

Окно Project build options (wx_test) [Вкладки Search directories - Compiler и Resource compiler]:

$(WXWIN)\include

Окно Project build options (Debug) [Вкладка Linker settings]:

Окно Project build options (Debug) [Вкладки Search directories - Compiler и Resource compiler]:

$(WXWIN)\lib\gcc_lib\mswud

Окно Project build options (Debug) [Вкладки Search directories - Linker]:

$(WXWIN)\lib\gcc_lib

Окно Project build options (Release) [Вкладка Linker settings]:

Окно Project build options (Release) [Вкладки Search directories - Compiler и Resource compiler]:

$(WXWIN)\lib\gcc_lib\mswu

Окно Project build options (Release) [Вкладки Search directories - Linker]:

$(WXWIN)\lib\gcc_lib

Далее сохраняем настройки путем нажатия кнопки [Ок] в форме настройки сборки проекта Project build options.

Скомпилируем (собирем) наше приложение (Build --> Build and run):

p/s.
Пост ориентирован прежде всего на начинающую аудиторию программистов, и не в коем случае не претендует на истину в последней инстанции.
В следующих постах опишу как «правильно» собрать библиотеку компьютерного зрения OpenCV.

Спасибо за внимание.

Как Вам пост?

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Проголосовал 1 человек. Воздержавшихся нет.

ссылка на оригинал статьи http://habrahabr.ru/post/212027/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *