Компиляция библиотеки wxWidgets в Code Blocks

Компиляция библиотеки wxWidgets в Code::Blocks

Если вам нужна кроссплатформенная библиотека для создания интерфейса программы, то стоит в первую очередь обратить на wxWidgets или Qt. Про Qt много всего интересного написано на сайте Блог программиста, однако я обычно предпочитаю wxWidgets за чуть меньший размер dll-ок, которые необходимо при этом добавлять в программу, да и компилировать программу с ней несколько легче. С другой стороны, wxWidgets — это библиотека исключительно для построения интерфейсов, в то время как Qt — это целый фреймворк, который имеет множество дополнительных возможностей, напрямую с интерфейсом не связанные. Как видно из заголовка, эта статья будет посвящена wxWidgets.

На мой взгляд для кроссплатформенной разработки на C++ в качестве среды разработки больше всего подходит Code::Blocks, с каждой версией этой IDE пользоваться становится все легче, и все лучше она работает «из коробки». В этой статье мы рассмотрим процесс компиляции библиотеки wxWidgets в этой среде.

На странице загрузки wxWidgets можно скачать уже скомпилированные объектные файлы для этой библиотеки, но иногда нужно самому скомпилировать библиотеку, например, если требуется задать какие-то параметры компиляции или скомпилировать каким-нибудь специфическим компилятором.

В этой статье мы рассмотрим компиляцию wxWidgets с помощью компилятора mingw, который прилагается с Code::Blocks. На всякий случай напомню, что mingw — это компилятор GCC под Windows.

Компиляция библиотеки wxWidgets

0. Качаем Code::Blocks Главное скачать Code::Blocks с интегрированным mingw.

1. Устанавливаем Code::Blocks. Здесь нет ничего особенного, под Windows жмем Next -> Next -> Next. Все как обычно.

2. Установка переменной окружения PATH. Code::Blocks может использовать как сторонние компиляторы, так и интегрированный mingw (именно этот случай мы рассматриваем), который после установки будет располагаться в папке C:\Program Files (x86)\CodeBlocks\MinGW\. Чтобы было проще использовать этот компилятор, желательно добавить этот путь в переменную окружения PATH. В принципе, этого можно не делать, но тогда во многих случаях при работе с тем же компилятором из командной строки придется или указывать полный путь до компилятора, или добавлять его в ту же самую переменную при каждом сеансе работы. ИМХО, лучше установить эту переменную окружения сразу.

Для того, чтобы установить переменную окружения под Windows, нужно попасть в диалог «System Properties» (поскольку у меня англоязычная Windows, все названия я буду приводить на английском языке, думаю, что найти их русскоязычный аналог не составит труда). Этот диалог достаточно глубоко закопан, чтобы в него попасть под Windows 8.1, нажимаем правую кнопку мыши на кнопке Пуск, выбираем пункт меню System. Откроется следующее окно:

system.png: 800x640, 36k (19.10.2014 18:16)

Слева выбираем пункт Advanced system settings и попадаем в диалог «System Properties». Затем на вкладке Advanced нажимаем кнопку Environment Variables

advanced.png: 426x475, 13k (19.10.2014 18:15)

Откроется диалог «Environment Variables», в нижнем списке которого нужно найти переменную Path.

variables.png: 394x437, 12k (19.10.2014 18:16)

Значение этой переменной у вас будет скорее всего другое. Дважды щелкаем на эту переменную, и в открывшемся диалоге добавляем в конец через точку с запятой путь до запускаемых файлов mingw, т.е. в нашем случае до C:\Program Files (x86)\CodeBlocks\MinGW\bin\.

3. Качаем wxWidgets. Нужно скачать файл из раздела «Source Code», для простоты будем считать, что скачиваем архив с исходниками в формате zip или 7z.

wx_download.png: 299x289, 15k (19.10.2014 18:17)

4. Распаковываем архив с wxWidgets в какую-нибудь папку, например, в C:\Library\wxwidgets\.

5. Открываем командную строку с помощью команды cmd.

6. В архиве wxWidgets есть специальная папка («build\msw»), в которой хранятся файлы проекток для компиляции библиотеки под Windows с помощью различных сред. Переходим в эту папку с помощью команды

7. Если вы уже пытались (безуспешно) или с другими параметрами компилировать wxWidgets, то нужно предварительно удалить следы предыдущей компиляции. Разумеется, можно просто удалить папку с распакованными файлами библиотеки, а можно воспользоваться скриптом makefile. На самом деле удаление результатов компиляции с помощью makefile может быть полезно, если вы хотите заново перекомпилировать wxWidgets с каким-то определенным набором параметров, в то время как файлы, удачно скомпилированные с другими параметрами компиляции, оставить. Далее (в п. 8) мы будем компилировать библиотеку с использованием параметров USE_XRC=1 SHARED=1 MONOLITHIC=1 UNICODE=1 USE_OPENGL=1 BUILD=release, поэтому команда удаления должна иметь точно такие же параметры с добавлением команды clean в конце:

mingw32-make.exe -f makefile.gcc USE_XRC=1 SHARED=1 MONOLITHIC=1
UNICODE=1 USE_OPENGL=1 BUILD=release clean

mingw32-make.exe -f makefile.gcc USE_XRC=1 SHARED=1 MONOLITHIC=0
UNICODE=1 USE_OPENGL=1 BUILD=release clean

Если во время выполнения этой команды вы получите ошибку о том, что команда mingw32-make не найдена, значит, вы не добавили путь до этой команды в переменную окружения PATH (см. п. 2).

8. Осталось в той же папке C:\Library\wxwidgets\build\msw\ запустить компиляцию исходников библиотеки. Теперь мы должны выбрать, компилируем мы библиотеку как монолитную (с параметром компиляции MONOLITHIC=1), когда будет создана одна большая dll-ка, или не монолитную, когда различные пакеты будут собраны в отдельных dll-ках (с параметром компиляции MONOLITHIC=0).

Забегая вперед, вот результирующие файлы, после компиляции wxWidgets в монолитном режиме:

Читайте также:  4 3 Задание на выпускную квалификационную работу

Источник

Не устанавливается WXWIDGETS для CodeBlocks

Вот ошибка при вводе 3-й строки введите сюда описание изображенияОчень хочу поставить а решить эту проблему не в состоянии

Если Вам нужно просто решить задачу установки библиотеки wxWidgets, не разбираясь в особенностях её сборки, то можете воспользоваться пакетом msys2, который предоставит искомое.

Для начала установите msys2, как это подробно показано на скриншотах по приведённой ссылке, а затем, открыв терминал msys2 из меню виндовса, введите команду:

Она выведет список доступных пакетов этого фреймворка. В моём случае получилось такое:

Выбираем нужный пакет и устанавливаем. Менеджер пакетов разрешит все зависимости автоматически. В общем, получается всё просто как в линуксах.

Судя по ошибкам компиляции проблема в том, что компилятор не находит стандартные заголовочные файлы, находящиеся в папке include.

1) Нужно убедиться, что путь до каталога установки MinGW не содержит пробелов и русских символов.

2) Задать переменные окружения CPLUS_INCLUDE_PATH и LIBRARY_PATH. К примеру если каталог установки C:\mingw, то CPLUS_INCLUDE_PATH должна содержать значение C:\mingw\include, а LIBRARY_PATH значение C:\mingw\lib.

3) Перезагрузить компьютер после установки переменных окружения.

Столкнулся с аналогичной ошибкой в Windows7-x64 . Решилось всё использованием оболочки в комплекте с TDM-GCC-32 5.1.0-3 . Странно, но факт, стандартный cmd тупит и теряет пути. Сборку делал со следующими командами:

wxWidgets-3.0.3 собрался отлично и со всеми библиотеками, необходимыми для запуска. Все остальные действия по установке аналогичны, тем, что приводятся в большинстве инструкций по установке.

P.S. Старайтесь избегать длинных путей, пробелов и кириллицы при установке. Как видно из параметров стены текста в ходе сборки выводятся не в консоль, а в лог-файл.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками c++ mingw codeblocks или задайте свой вопрос.

дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.6.14.39486

Источник

WxWidgets – библиотека инструментов для создания GUI-приложений

Для разработки и реализации графического пользовательского интерфейса (GUI) в настоящее время существуют разные инструменты. Как правило, такие инструменты представляют собой фреймворк (библиотека специализированных программных инструментов), для функционирования и использования которого необходима соответствующая среда рабочего окружения. Такая ситуация например, с окружением JRE для написания GUI на Java. Примерно то же самое и с .Net – огромный неповоротливый фреймворк. В итоге, многие программисты задумываются над поиском более независимого, лёгкого и универсального инструмента. Желательно такого, чтобы для запуска и работы приложений на его основе не нужно было его «носить с собой». Именно такой альтернативой и является библиотека wxWidgets. В данной статье будут рассмотрены основные возможности этой библиотеки, а также её сборка для Linux-систем.

Почему именно wxWidgets?

Несмотря на то, что wxWidgets не является такой популярной, как .Net, Qt иди Java, однако возможности этой библиотеки куда более привлекательны, особенно для тех разработчиков, которые ценят качественную переносимость приложений между платформами, а также скорость их работы и потребление ресурсов.

Фреймворк .Net довольно тяжёл. Производительность приложений на основе .Net оставляет желать лучшего. Совместимость с UNIX-подобными системами для него также является проблемой. И это направление в виде платформы Mono представляется далеко не самым перспективным.

Qt-фреймворк, основанный на C++, хоть и является более быстрым и переносимым по сравнению с .Net, однако не совсем ясна ситуация с его лицензией. Существует открытая и коммерческая лицензии этого инструментария. Что, очевидно, налагает некоторые ограничения на использование свободной его версии. Иначе бы параллельно не существовало коммерческой ветки с более широкими возможностями. Этот факт также заставляет сомневаться относительно перспектив проектов на Qt. В техническом же отношении, этот фреймворк не обеспечивает полноценный нативный внешний вид приложений. Контроллы и элементы управления выглядят несколько иначе, нежели отрисовываемые средствами WinAPI в Windows или на GTK в UNIX-системах. Зачастую, это смущает и отпугивает пользователей.

Приложения на Java работают как минимум в полтора раза медленнее, чем на C/C++. Это далеко не секрет. Так же, как и то, что приложения, созданные на основе Java-апплетов внешне никак не вписываются в нативный стиль оформления ни одной из платформ. Пользователям не нравится работать с необычно и даже коряво выглядящими элементами интерфейса Java-приложений. При этом, как и в случае с .Net, необходимо всюду, на любой используемой платформе иметь установленную среду JRE для работы Java-апплетов. Именно такая возня и отталкивает многих разработчиков от использования Java.

Практически всех вышеперечисленных недостатков лишена wxWidgets – абсолютно открытая и свободная библиотека, которая способна отрисовывать GUI с помощью API платформы. Это значит, что окна приложений на wxWidgets и элементы интерфейса выглядят стандартно, гармонично вписываясь в оформление рабочего стола используемой платформы. При этом скорость работы и производительность таких приложений действительно впечатляет. Сама же библиотека написана на C++ и представляет собой набор классов, реализующих весь функционал библиотеки. Эти классы подключаются к проектам и используются как базовые, для создания приложений. Основными преимуществами wxWidgets над другими аналогами являются:

  • быстродействие и производительность, ведь инструкции о рисовании элементов интерфейса транслируются непосредственно к стандартному API платформы без каких-либо промежуточных программных интерфейсов и сред;
  • отсутствие обязательной предустановки wxWidgets – просто собрал и используй, подключая заголовочные файлы и файлы библиотек к проекту;
  • сравнительно небольшой размер собранных приложений, даже при их статической линковке;
  • быстрое создание GUI вручную из кода, без использования RAD-утилит, которые, кстати, для wxWidgets тоже существуют, например wxSmith в Code::Blocks IDE, wxFormBuilder или wxCrafter в CodeLite IDE.
Читайте также:  Установки комбинированные мембранные серии ОСМОПРОФ

Стоит еще раз обратить внимание на то, как wxWidgets рисует элементы управления интерфейса. Приложение, написанное на wxWidgets, которое скомпилировано в Windows, будет отображаться стандартными средствами WinAPI. Код того же самого приложения, без каких-либо изменений, но скомпилированный под UNIX будет рисоваться также стандартными средствами, т. е. на GTK. Можно даже собрать GUI на wxWidgets так, что оно будет использовать самый, что ни на есть чистейший X11. И это без изменения кода. Вот, что такое по-настоящему качественная переносимость.

Кроме богатых возможностей создания GUI wxWidgets имеет и ряд других функций, таких как работа с сокетами, регулярными выражениями, работа с базами данных (БД), HTTP-сервер, клиенты HTTP и FTP обработка XML и полноценная поддержка графических библиотек, таких как OpenGL.

Казалось бы, почему при всех своих достоинствах, wxWidgets практически непопулярен? Во-первых, это проект, который начинался всего одним человеком. В 1992 году над ним начал работать его создатель — Джулиан Смарт. Он и в настоящее время занимается поддержкой wxWidgets, но уже в составе небольшой группы. Таким образом, wxWidgets – это продукт творчества, а не коммерческий проект, над которым работает армия программистов и который продвигается благодаря рекламным кампаниям. Это и есть главный недостаток wxWidgets. И как следствие — небольшое количество обучающих и поддерживающих ресурсов. Основными из которых являются официальный ресурс вики, а также форумы сообщества.

Примеры приложений, созданных на wxWidgets

Несмотря на не самую выдающуюся популярность, приложений на основе wxWidgets достаточно много. Среди таковых, кстати, есть и снискавшие уважение пользователей, например Code::Blocks IDE:

Рис. 1: Среда разработки Code::Blocks IDE в Windows 7.

Существует также ещё одна IDE, подобная Code::Blocks. Но с более изящным оформлением, удобным функционалом и несколько более дружественным GUI – это CodeLite:
Графический интерфейс популярного кроссплатформенного FTP-клиента FileZilla также написан на wxWidgets:
Популярным бесплатным звуковым редактором, доступным для всех платформ является Audacity, который, как можно догадаться, для отображения GUI использует библиотеку wxWidgets:

Рис. 2: Кроссплатформенная среда разработки CodeLite IDE в KDE.

Сборка wxWidgets под Linux

Для своей компиляции библиотека wxWidgets не требует сторонних или дополнительных зависимостей. Для начала нужно скачать архив с исходными текстами библиотеки:

Распаковка загруженного архива:

Содержимое архива будет распаковано в поддиректорию wxWidgets-3.0.4 текущего каталога. Теперь нужно перейти в каталог с исходниками и создать в нём директорию для сборки, например gtk-build:

Далее, необходимо сконфигурировать будущую сборку, выполнив скрипт конфигурации, передав ему необходимые параметры:

Назначение указанных параметров следующее:

  • –-with-gtk3 — включение поддержки GTK версии 3;
  • –-disable-shared — включение статической линковки, при которой библиотеки wxWidgets будут включены в исполняемый файл;
  • —enable-unicode – поддержка Юникода в приложении;
  • —with-opengl – поддержка графической библиотеки OpenGL, на случай, если кому-то нужно написать свой игровой движок;
  • —prefix=PATH – здесь (вместо PATH) указывается желаемое расположение библиотеки в файловой системе. Т. е. куда она будет впоследствии установлена;
  • —with-libmspack – поддержка форматов сжатия Microsoft, таких как *.CAB, *.CHM и т. д., для большей кроссплатформенности не помешает;
  • —with-sdl – поддержка библиотеки SDL для создания графического контекста окон и фреймов, когда не хочется это делать вручную.

Приведённый перечень параметров сборки является наиболее универсальным и позволяет создавать практически любые приложения на wxWidgets. В результате вывод команды (несколько последних строк) configure должен быть примерно таким:

Если сборка завершилась ошибкой установите необходимые пакеты и библиотеки, например в убунту

Теперь можно приступить непосредственно к сборке:

Здесь ключ -j — это количество потоков для одновременной обработки нескольких задач сборки. В случае, когда используется 8-ядерный/16-поточный процессор, такой как например, AMD Ryzen 7 2700, можно указать -j16. Чем больше потоков, тем быстрее сборка.

Далее, после окончания сборки, самое время установить готовую библиотеку wxWidgets:

В результате файлы библиотеки и файлы заголовков будут скопированы в соответствии с указанным на этапе конфигурирования, в параметре —prefix значением — в /opt/wxwidgets-gtk3/ . Если нужно, чтобы библиотека устанавливалась там же, где и была собрана, то следует задать —prefix=$(pwd) .

Далее, для удобства можно установить переменную окружения, чтобы использовать служебную команду wx-config, добавив в файл

/.bashrc строку, перезапустив после этого сеанс пользователя:

Проверка, что всё работает:

Команда ws-config используется для определения путей подключения заголовочных файлов и библиотек. Которые необходимы для указания компилятору и линковщику. Так, например, для того, чтобы скомпилировать проект на wxWidgets. Необходимо передать компилятору то, что возвращает команда wx-config:

Читайте также:  Компьютер для Red Dead Redemption 2

Здесь параметры «—cxxflags» и «—libs» указывают, что команда wx-config должна возвратить требуемый для удачной сборки набор флагов компилятора и пути подключения заголовочных файлов и библиотек wxWidgets.

Заключение

В заключение важно заметить, что библиотека wxWidgets поставляется в готовом виде практически в любом из дистрибутивов Linux. Однако далеко не всегда это универсальные сборки. Часто бывает, особенно это касается сложных проектов, что необходимо пересобрать wxWidgets с нужными параметрами. Задействовав таким образом дополнительные возможности, которых нет в стандартной сборке из репозитория дистрибутива. Для того, чтобы узнать, какие параметры сборки и возможности доступны, нужно выполнить команду ../configure —help в каталоге сборки wxWidgets. В результате будет выведен список доступных параметров и их назначение.

Как можно видеть, wxWidgets – это действительно универсальная и по-настоящему кроссплатформенная библиотека. Которая является достойным (если не самым лучшим) выбором для создания быстрых и платформонезависимых приложений любой сложности и направленности.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник



CodeBlocks Setup Guide

This page describes the steps I took in order to get Code::Blocks working with a homemade wxWidgets. I used the Code::Blocks+MINGW 1.0 bundle and wxWidgets 2.6.

NOTE: This guide is for compiling with MINGW, not Cygwin nor MSYS.

Preparing Code::Blocks

  • Download Code::Blocks with the MINGW bundle from http://www.codeblocks.org
  • Install Code::Blocks

Building wxWidgets from the command line

Downloading the last stable wxWidgets library

The last stable wxWidgets distribution can be found at the wxWidgets website (https://www.wxwidgets.org/downloads/). You can choose between an installer and a zip file. You can just get the zip file because the installer is also a zipped version.

If you use the plain zip version, make sure to unzip using full paths. Otherwise the directories won’t be created correctly.

NOTE: In the rest of these instructions I’ll be calling the wxWidgets directory %WXWIN% you have to change it to your own directory. (e.g. "c:\wxWidgets-x.x")

Building your own wxWidgets library

Before anything, add the bin directory of MinGW under the CodeBlocks installation directory to the %PATH% variable (Windows, Mac). Now it is time to compile wxWidgets, open the command promt and change to the wxWidgets directory:

Now we are on the right place we are first going to clean up the source:

NOTE: if you still have problems with compiling after cleaning, you may want to remove the directory in the build\msw directory. (it contains object files. ) When everything is clean we can compile wxWidgets:

First we have to configure the build. If your makefile.gcc (in my version on line 7) includes config.gcc, your command line parameters will be overriden by the config-file. Thus edit the compiler settings in config.gcc to reflect your choice. The following are recommended: USE_XRC=1 SHARED=1 MONOLITHIC=1 BUILD=release UNICODE=0

Otherwise, you can build wxWidgets from the commandline as follows:

Now you can get a cup of coffee, or do something else, because this could take a long time.

NOTE: If you mess up and want to clean, you have to pass the same parameters to make clean.

Example for clean commandline:

So now everything is compiled for using codeblocks.

Copying libraries

When compilation is finished it is useful to copy the libs to another directory. By doing this you can make several builds (e.g. debug and release).

  • So first we create a directory this could be done in %WXWIN%\lib.
  • Then we go to the directory %WXWIN%\lib\gcc_dll (could called diffrent when you changed the build options)
  • Rename the directory %WXWIN%\lib\gcc_dll to the directory of your choice. (For me it is %WXWIN%\lib\gcc_dllNonUnicode)

NOTE: Make sure everything is removed from the directory %WXWIN%\lib\gcc_dll else you can get trouble when compiling another version.

Setting Up Code::Blocks

Compiler/Linker Options

Next you should set up Code::Blocks to use the wx-config compiler and linker arguments. The easiest way to do this is to create new compiler flags, which can be turned on or off as needed later on.

Create a wxWidgets Compiler Flag

  1. Go to Project —> Build Options
  2. Under Compiler flags —> General, right-click an item and select «New flag. » from the shortcut menu.
  3. For the Name field, enter something like, «wxWidgets — Compiler Suggested Settings».
  4. For the Compiler flags field, enter
  5. Press OK

Create a wxWidgets Linker Flag

  1. Under Compiler flags —> General, right-clicking an item and select «New flag. » from the shortcut menu.
  2. For the Name field, enter something like, «wxWidgets — Linker Suggested Settings».
  3. For the Linker flags field, enter
  4. Press OK

Now that you have setup the compiler/linker flags, make sure to turn them on under Project —> Build Options —> YourProjectName for wxWidgets projects you wish to build.

Источник