Как добавить библиотеку в codeblocks
Перейти к содержимому

Как добавить библиотеку в codeblocks

Подключение SFML к Code::Blocks

1) Скачиваем SFML 2.1 (специальную версию для Code::Blocks):
2) Создаем и настраиваем SFLML проект:
— запускаем Code::Blocks и создаем пустой проект (Empty project).
— в меню выбираем Project -> Build options.
— во вкладке «Search directories» добавляем:
a) путь к заголовочным файлам SFML (/include) во вкладке Compiler;
б) путь к библиотекам SFML (/lib) во вкладке Linker;
Эти пути одинаковы для Debug и Release конфигураций.

— компонуем программу с SFML библиотеками (.a файлы). SFML состоит из пяти модулей (system, window, graphics, network and audio). Каждому модулю соответствует отдельная библиотека. Библиотеки нужно добавить во вкладку «Linker settings», в список «Link libraries». Добавьте нужные вам библиотеки, например «sfml-graphics», «sfml-window» and «sfml-system».
В конфигурации Release:

В конфигурации Debug:

— во вкладке Compiler settings определяем SFML_STATIC макрос в опциях препроцессора.

в) тестируем проект. Создаем в созданном проекте .cpp файл:

г) компилируем и запускаем на выполнение.

SFML and Code::Blocks (MinGW)

This tutorial is the first one you should read if you’re using SFML with the Code::Blocks IDE, and the GCC compiler (this is the default one). It will explain how to configure your SFML projects.

Installing SFML

First, you must download the SFML SDK from the download page.

There are multiple variants of GCC for Windows, which are incompatible with each other (different exception management, threading model, etc.). Make sure you select the package which corresponds to the version that you use. If you are unsure, check which of the libgcc_s_sjlj-1.dll or libgcc_s_dw2-1.dll files is present in your MinGW/bin folder. If MinGW was installed along with Code::Blocks, you probably have an SJLJ version.
If you feel like your version of GCC can’t work with the precompiled SFML libraries, don’t hesitate to build SFML yourself, it’s not complicated.

You can then unpack the SFML archive wherever you like. Copying headers and libraries to your installation of MinGW is not recommended, it’s better to keep libraries in their own separate location, especially if you intend to use several versions of the same library, or several compilers.

Creating and configuring a SFML project

The first thing to do is choose what kind of project to create. Code::Blocks offers a wide variety of project types, including an «SFML project». Don’t use it! It hasn’t been updated in a long time and is likely incompatible with recent versions of SFML. Instead, create an Empty project. If you want to get rid of the console, in the project properties, go to the «Build targets» tab and select «GUI application» in the combo box instead of «Console application».

Now we need to tell the compiler where to find the SFML headers (.hpp files), and the linker where to find the SFML libraries (.a files).

In the project’s «Build options», «Search directories» tab, add:

  • The path to the SFML headers (<sfml-install-path>/include) to the Compiler search directories
  • The path to the SFML libraries (<sfml-install-path>/lib) to the Linker search directories

These paths are the same in both Debug and Release configuration, so you can set them globally for your project.

Screenshot of the dialog box for setting up the search paths

The next step is to link your application to the SFML libraries (.a files) that your code will need. SFML is made of 5 modules (system, window, graphics, network and audio), and there’s one library for each of them.
Libraries must be added to the «Link libraries» list in the project’s build options, under the «Linker settings» tab. Add all the SFML libraries that you need, for example «sfml-graphics», «sfml-window» and «sfml-system» (the «lib» prefix and the «.a» extension must be omitted).

Screenshot of the dialog box for setting up the project

It is important to link to the libraries that match the configuration: «sfml-xxx-d» for Debug, and «sfml-xxx» for Release. A bad mix may result in crashes.

When linking to multiple SFML libraries, make sure that you link them in the right order, it is very important for GCC. The rule is that libraries that depend on other libraries must be put first in the list. Every SFML library depends on sfml-system, and sfml-graphics also depends on sfml-window. So, the correct order for these three libraries would be: sfml-graphics, sfml-window, sfml-system — as shown in the screen capture above.

The settings shown here will result in your application being linked to the dynamic version of SFML, the one that needs the DLL files. If you want to get rid of these DLLs and have SFML directly integrated into your executable, you must link to the static version. Static SFML libraries have the «-s» suffix: «sfml-xxx-s-d» for Debug, and «sfml-xxx-s» for Release.
In this case, you’ll also need to define the SFML_STATIC macro in the preprocessor options of your project.

Screenshot of the dialog box for defining the SFML_STATIC macro

Starting from SFML 2.2, when static linking, you will have to link all of SFML’s dependencies to your project as well. This means that if you are linking sfml-window-s or sfml-window-s-d for example, you will also have to link opengl32, winmm and gdi32. Some of these dependency libraries might already be listed under «Inherited values», but adding them again yourself shouldn’t cause any problems.

Here are the dependencies of each module, append the -d as described above if you want to link the SFML debug libraries:

  • sfml-window-s
  • sfml-system-s
  • opengl32
  • freetype
  • sfml-system-s
  • opengl32
  • winmm
  • gdi32
  • sfml-system-s
  • openal32
  • flac
  • vorbisenc
  • vorbisfile
  • vorbis
  • ogg
  • sfml-system-s
  • ws2_32
  • winmm

You might have noticed from the table that SFML modules can also depend on one another, e.g. sfml-graphics-s depends both on sfml-window-s and sfml-system-s. If you static link to an SFML library, make sure to link to the dependencies of the library in question, as well as the dependencies of the dependencies and so on. If anything along the dependency chain is missing, you will get linker errors.

Additionally, because Code::Blocks makes use of GCC, the linking order does matter. This means that libraries that depend on other libraries have to be added to the library list before the libraries they depend on. If you don’t follow this rule, you will get linker errors.

If you are slightly confused, don’t worry, it is perfectly normal for beginners to be overwhelmed by all this information regarding static linking. If something doesn’t work for you the first time around, you can simply keep trying always bearing in mind what has been said above. If you still can’t get static linking to work, you can check the FAQ and the forum for threads about static linking.

If you don’t know the differences between dynamic (also called shared) and static libraries, and don’t know which one to use, you can search for more information on the internet. There are many good articles/blogs/posts about them.

Your project is ready, let’s write some code now to make sure that it works. Add a «main.cpp» file to your project, with the following code inside:

Compile it, and if you linked to the dynamic version of SFML, don’t forget to copy the SFML DLLs (they are in <sfml-install-path/bin>) to the directory where your compiled executable is. Run it, and if everything works you should see this:

Screenshot of the Hello SFML application

If you are using the sfml-audio module (regardless whether statically or dynamically), you must also copy the DLL of the external library needed by it, which is OpenAL32.dll.
These files can be found in <sfml-install-path/bin> too.

Создание в Code::Blocks графических приложений с помощью wxWidgets

В этой иллюстрированной статье описано, как можно создавать графические приложения в CodeBlocks с помощью библиотеки инструментов wxWidgets. Статья предназначена для новичков, но предполагает, что читатель уже не испытывает проблем с созданием консольных приложений вида «Hello World». CodeBlocks можно скачать c codeblocks.org, wxWidgets c wxwidgets.org.

wxWidgets — это библиотека графических инструментов (по-английски Widget toolkit). Она необходима для того, чтобы в среде CodeBlocks можно было создавать программы с графическим интерфейсом. Считаю это лучшим решением, чем GTK+, которая более ориентирована на Линукс-платформы и создаёт интерфейсы, тяжело работающие на Windows. Библиотека преднаначена для использования на огромном числе различных платформ, у каждой из которых свои особенности. И кроме того, зависит от некоторых элементов окружения. Поэтому создатели wxWidgets не дают готовые дистрибутивы, а предлагают пользователям самостоятельно их скомпилировать. Порт библиотеки на каждую платформу имеет своё название. Для варианта на Windows используется наименование wxMSW (wxWidgets MicroSoft Windows), на это слово следует ориентироваться при чтении документации.

Нижеизложенная статья является иллюстрированным пересказыванием шагов, приведённых на официальном сайте wiki.codeblocks.org и в документе \docs\msw\install.txt , вложенном в распространяемые исходники. В некоторых местах Интернета можно отыскать немного отличающиеся наборы параметров для коппиляции. Автор данной статьи не берётся судить, какой подход более корректен, следует официальным документам и сразу предупреждает, чтов результате при создании графических элементов в CodeBlocks отмечены некоторые глюки. В качестве ОС используется Windows 7, компилятор MinGW в разновидности GCC. Именно этот компилятор идёт в комплекте с CodeBlocks, он также может быть установлен отдельно с сайта mingw.org. Если используете другой компилятор, то лучше поищите более специализированную инструкцию.

1. Исходим из того, что в вашей системе уже имеется компилятор С++, но путь к нему ещё не занесён в систему. Выполним это. Компилятор С++ нужен, поскольку на этом языке написан исходный код wxWidgets. И если у вас установлен и работает CodeBlocks, то значит, имеется компилятор MinGW/GSS. Необходимо найти папку с этим компилятором и в ней подпапку bin. Если CodeBlocks установлен в систему (т.е. не портативная версия), то быстрее всего это будет C:\Program Files\CodeBlocks\MinGW\bin . Скопируйте в буфер полный адрес данной подпапки.

2. Из меню Пуск зайдите в Control Panel > System > Advanced system settings > Environment Variables. Появится окно Environment Variables .
(Примечание: вы можете сразу попасть в окно System, если воспользуетесь горячей клавишей <Win>+<Pause>. Рекомендую её запомнить.)

Скриншок окна "Edit System Varialbe" после добавления нового пути

3. В списке » System variables » найдите Path . Нажмите кнопку «Edit. «. В конце списка папок поставьте точку с запятой и добавьте ранее скопированный путь. Будьте очень внимательны на этом шаге: вы конфигурируете всю Windows. Если вначале у вас там было, к примеру,
%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\
то после внесения должно получиться
%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files\CodeBlocks\MinGW\bin

4. Скачайте исходный код wxWidgets с wxwidgets.org/downloads, вариант «Windows ZIP» (не Installer). Традиционно рекомендуется брать последний стабильный релиз (не «development»). В настоящий момент это 3.0.3. Если хотите релиз 3.1.0, то учтите, что официальная версия CodeBlocks 16.01 его не поддерживает, вам нужна редакция «Nightly builds». (о ней в конце статьи)

5. Распакуйте архив в папку, в путях к которой нет пробела. К примеру, C:\wxWidgets .

Окно "Run"

6. Запустите CMD (интерпретатор командной строки). Обычно это делается обычно через нажатие на клавиатуре <Win>+<R> и пропечатывание в появившемся окне команды cmd.

окно CMD при переходе в папку wxWidgets

7. В CMD перейдите в папку с распакованным wxWidgets и углубитесь в поддеректорию build\msw . Если устанавливаемая библиотека у нас находиться по адресу C:\wxWidgets , то перейти туда можно командой » cd \wxWidgets\build\msw » (без кавычек). ( cd означает «change directory» — сменить директорию. А \ означает, что адрес новой директории нужно вычислять, начиная с корня диска.)

окно CMD после вставки команды компиляции wxWidgets

8. Скопируйте в командную строку страшную команду
mingw32-make -f makefile.gcc BUILD=release SHARED=1 MONOLITHIC=1 UNICODE=1 CXXFLAGS=-fno-keep-inline-dllexport
Она взята с wiki.codeblocks.org. Внизу страницы есть краткое объяснение, что означает каждый компонент. Также за разъяснениями можно обратиться в конец упоминавшегося документа \docs\msw\install.txt из установочного дистрибутива.

Успешное завершение компиляции библиотеки

9. Идите пить чай и заниматься подобными вещами: компиляци занимает около получаса, от вас более ничего не нужно. Наберитесь терпения и дождитесь, пока опять не появится неторопливо мигающая строка запроса.

Занесение новой Environment varialbe в систему

(Создатели wxWidgets рекомендуют добавить в систему environment variable WXWIN, указывающую на папку с установленным wxWidgets. Это в дальнейшем позволит производить некоторые действия более коротким способом. Производится в том же окне, где мы в самом начале добавляли в систему путь к компилятору MinGW. Только в этот раз используйте кнопку New. Подробности не расписываю. Если это действие приводит вас в смятение, то пропустите. На работу wxWidgetx внутри CodeBlocks наличие этой переменной в системе не сказывается.)

Второй этап. wxWidgets уже скомпилирован, теперь все дальнейшие операции выполняем только внутри CodeBlocks. Для создания программы с графическим интерфейсов выполните следующее:
1. Убедитесь, что у вас подключён плагин wxSmith. Для этого зайдите в главно меню на Plugins > Manage plugins. Плагин традиционно отображается в самом низу. Достаточно включить сам wxSmith. Дополнительные модули «wxSmith — Aui», «wxSmith — Contrib Items» и «wxSmith — MIME plugin» по желанию. Влияния этих модулей на удобство и безглючность реализации основного функционала базовых элементов замечено не было.

2. Традиционное File > New > Projects.

Окно создания нового проекта

3. В списке шаблонов выбрать » wxWidgets project «.

Выбор версии wxWidgets

4. На следующем экране wxWidgets version выбираем ту версию, которую подключаем. В нашем случае » wxWidgets 3.0.x «.

5. Далее идут несколько стандартных экранов. Всё также, как и при создании консольных приложений.

6. Preferred GUI Builder : wxSmith (если выбрать None, то инструментов WYSIWYG не будет, а wxFormBuilder — это внешнее приложение, которое нужно отдельно устанавливать.)
Application Type : Рекомендую выставить Frame Based , поскольку Dialoge Based плохо стыкуется с wxWidgets, именно в этом режиме наблюдается подавляющее большинство глюков.

Выбор GUI и типа создаваемого приложения

В двух словах об особенностях данных типо в. Dialog Based предназначен для маленьких приложений с интерфейсом вида ‘нажал на кнопку — выскочило сообщением’. Frame Based предна значен для серьёзных приложений, подразумевающих наличие меню, строки состояния и многокомпонентных пользовательских окон. Почти все программы разрабатываются на Frame Based, так что кривость wxWidgets на Dialog Based не является серьёзной проблемой.

7. wxWidgets’ location . При нажатии на многоточие выскочит окно запроса, в нём в поле base укажите папку, где вы разместили wxWidgets. После закрытия окна этот адрес автоматически перенесётся в wxWidgets’ location. (В будущем вы всегда сможете подправить значение этой переменной через Settings > Global variables. )

Прописывание значения глобальной переменной wx

Указание расположения папки с wxWidgets

Настройка параметров компилятора

8. На следующем окне уберите галочку с » Create Debug configuration «, поскольку библиотека wxWidgets скомпилирована нами только в режиме Release. Нам нет смысла залезать в отладку компонентов самого wxWidgets.

Настройка параметров компилятора -2

9. Следующем шаге в группе полей «wxWidgets Library Settings » необходимо проставить галочки в соответствии с теми параметрами, с которыми мы ранее скомпилировала wxWidgets. Т.е. все три опции должны быть отмечены. В группе полей «Miscellaneous Settings» — на ваш выбор.

Рекомендуется отметить » Configure Advanced Options » и на следующем шаге убедиться, что опция » Use_WXDEBUG_and Debug wxWidgets lib » пуста (нам не нужно заниматься отладкой самого wxWidget). » Release Target » лучше переставить в » GUI Mode «, чтобы создавалось чисто-оконное приложение. В случае выбора «Console Mode» одновременно создадутся два окна: консольное и оконное.

Настройка параметров компилятора -3

10. Всё сделано. Теперь можно создавать графический интерфейс. У процесса есть свои особенности, которые нужно понять. Для тестирования можете попробовать создать кнопку, произведите на ней двойной щелчок и в появившемся коде внутри функции ::OnButton1Click прописать
wxString msg = «Hello wxWidgets!»;
wxMessageBox(msg, _(«Very clever text»));

Код, вызывающий простейшее окно с сообщением

wxWidgets работает

Если собираетесь в будущем регулярно создавать графические интерфейсы посредтсвом wxWidgets, то ознакомьтесь с программой wxFormBuilder — возможно, что создавать интерфейс через неё будет удобнее.

Примечание:
Если имеете в системе внешний компилятор, вроде MinGW, то лучше установите CodeBlocks в редакции «Nightly builds». Делается это просто: на форуме открываете тему с последним релизом, скачиваете 3 архива с компонентами программы (это сама программа и две библиотеки от третих разработчиков) и распаковываете их в одну папку, не содержащую в своём пути пробелов (к примеру, С:\CodeBlocks).

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

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