SFML и Code::Blocks (MinGW)

в 14:25, , рубрики: c++, code::blocks, game development, mingw, SFML, документация, Компиляторы, Локализация продуктов, перевод, Программирование

SFML и Code::Blocks (MinGW) - 1

От переводчика: данная статья является второй в цикле переводов официального руководства по библиотеке SFML. Прошлую статью можно найти тут. Данный цикл статей ставит своей целью предоставить людям, не знающим язык оригинала, возможность ознакомится с этой библиотекой. Оригинал можно найти тут. Начнем.

Вступление

Эта статья — первая, которую вам следует прочитать, если вы используете среду разработки Code::Blocks с компилятором GCC (это стандартный компилятор для данной среды разработки). В ней будет рассказано, как настроить ваш проект.

Установка SFML

Для начала вы должны скачать SFML SDK со страницы загрузки.

Есть несколько вариантов GCC для Windows, которые несовместимы друг с другом (отличия в обработке исключений, в потоковой модели и т.д.). Убедитесь, что вы выбирите пакет, который соответствует той версии GCC, что вы используете. Если вы не уверены, проверьте, какой из файлов (libgcc_s_sjlj-1.dll или libgcc_s_dw2-1.dll) присутствуют в вашей директории MinGW/bin. Если MinGW установлен вместе с Code::Blocks, у вас наверняка SJLJ версия. Если ваша версия GCC не может работать с предварительно скомпилированной версией библиотеки SFML, вам придется собрать SFML самостоятельно. Это не сложно.

Далее вы должны распаковать архив с SFML в любую удобную для вас директорию. Копировать заголовочные файлы и библиотеки в вашу установку MinGW не рекомендуется. Лучше держать библиотеки в отдельном месте, особенно если вы намереваетесь использовать несколько версий одной библиотеки или несколько компиляторов.

Создание и конфигурирование проекта SFML

Первое, что вам необходимо сделать — это выбрать тип создаваемого проекта. Code::Blocks предлагает широкий выбор типов проектов, включая «SFML project». Не используйте его! Данный тип проекта довольно долго не обновлялся и, скорее всего, несовместим с последними версиями SFML. Вместо этого, создайте пустой проект. Если вы хотите избавиться от консоли, в свойства проекта перейдите в «Build targets» и в комбинированном списке выбирите «GUI application» вместо «Console application».

Теперь вам необходимо указать компилятору где искать заголовочные файлы (файлы с расширением .hpp) и компоновщику где искать библиотеки SFML (файлы с расширением .lib).

Добавьте в «Build options», во вкладку «Search directories» следующее:

  • Путь до заголовочных файлов SFML (<путь-к-установке-SFML>/include) в Compiler search directories
  • Путь до библиотек SFML (<путь-к-установке-SFML>/lib) в Linker search directories

Эти пути совпадают для конфигураций Debug и Release, так что вы можете установить их глобально для вашего проекта.

SFML и Code::Blocks (MinGW) - 2

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

SFML и Code::Blocks (MinGW) - 3

Важно указать библиотеки, соответствующие конфигурации: «sfml-xxx-d» для Debug и «sfml-xxx» для Release, иначе могут возникнуть ошибки.

При компановке библиотек SFML, убедитесь, что вы прокомпоновали библиотеки в правильном порядке, это очень важно для GCC. Правило заключается в том, что библиотеки, которые зависят от других библиотек, должны быть помещены первыми в списке. Любая библиотека SFML зависит от sfml-graphics, sfml-window и sfml-system. Это показано на снимке экрана выше.

Настройки, приведенные выше, позволят вам скомпоновать ваш проект с динамической версией SFML, для которой требуются DLL файлы. Если вы хотите напрямую интегрировать SFML в ваш исполняемый файл, а не использовать компоновку с динамической библиотекой, вы должны скомпоновать статическую версию библиотеки. Статические библиотеки SFML имеют суффикс "-s": «sfml-xxx-s-d» для конфигурации Debug и «sfml-xxx-s» для Release.

Так же вам необходимо определить макрос SFML_STATIC в опциях препроцессора вашего проекта.

SFML и Code::Blocks (MinGW) - 4

Начиная с SFML 2.2 при статической компоновке вам так же необходимо скомпоновать все зависимости SFML. Это означает, что если, к примеру, вы скомпонуете sfml-window-s или sfml-window-s-d, вам так же придется скомпоновать opengl32, winmm и gdi32. Некоторые из этих библиотек, возможно, уже перечислены в разделе «Inherited values», но добавление их не должно вызвать каких либо проблем.

В таблице ниже представлены зависимости для каждого модуля, добавьте -d если вы хотите скомпоновать Debug библиотеки SFML:

Модуль Зависимости
sfml-graphics-s
  • sfml-window-s
  • sfml-system-s
  • opengl32
  • freetype
  • jpeg
sfml-window-s
  • sfml-system-s
  • opengl32
  • winmm
  • gdi32
sfml-audio-s
  • sfml-system-s
  • openal32
  • flac
  • vorbisenc
  • vorbisfile
  • vorbis
  • ogg
sfml-network-s
  • sfml-system-s
  • ws2_32
sfml-system-s
  • winmm

Из таблицы вы могли заметить, что одни модули SFML могут зависить от других, например, sfml-graphics-s зависит от sfml-window-s и sfml-system-s. Если вы производите статическую компоновку библиотеки SFML, будьте уверены, что все зависимости из цепочки зависимостей были удовлетворены. Если одна из зависимостей отсутствует, вы получите ошибку компоновщика.

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

Если вы не знаете чем отличаются динамические (так же называемые общими) и статические библиотеки и какой тип библиотек использовать, вы можете найти больше информации в интернете. На данную тему есть множество хороших статей/блогов/постов.

Ваш проект готов, давайте напишем немного кода что бы проверить, что все работает правильно. Поместите следующий код в файл main.cpp:

#include <SFML/Graphics.hpp>

int main()
{
    sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");
    sf::CircleShape shape(100.f);
    shape.setFillColor(sf::Color::Green);

    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }

        window.clear();
        window.draw(shape);
        window.display();
    }

    return 0;
}

Теперь скомпилируйте проект, и, если вы скомпоновали вашу программу с динамической версией SFML, не забудьте скопировать файлы с расширением .DLL (они расположены в <путь-к-установке-SFML>/bin) в директорию, в которой расположен исполняемый файл вашей программы. Запустите программу, и, если все было сделано правильно вы должны увидеть это:

SFML и Code::Blocks (MinGW) - 5

Если вы используете модуль sfml-audio (независимо от того, статическую или динамическую его версию), вы так же должны скопировать внешнюю dll библиотеку OpenAL32.dll. Этот файл так же может быть найден в директории <путь-к-установке-SFML>/bin.

Следующая статья: SFML и Linux.

Автор: HighMem

Источник

Поделиться новостью

* - обязательные к заполнению поля