Задача:
Необходимо подключить библиотеку SFML (Simple and Fast Multimedia Library - простая и быстрая мультимедийная библиотека) к среде разработки (IDE) DEV C++
DEV C++ установлена на 64-х разрядной ОС MS Windows 8.1 Professional rus, другими словами, есть необходимость в подключении как 32-х разрядной, так и 64-х разрядной библиотеки SFML.
Решение:
-
Определяем версию установленного компилятора C++. Это важно, так как разные версии компиляторов GCC не совместимы между собой:
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.Как сказано в вышеприведенной цитате, определять версию компилятора следует ориентируясь на наличие файлов libgcc_s_sjlj-1.dll или libgcc_s_dw2-1.dll в папке MinGW/bin. Если эти файлы присутствуют, то, скорее всего, установлена SJLJ версия.
Примечание: Ориентироваться на версию компилятора, отображаемую в IDE DEV C++ не нужно:
Так же пусть вас не сбивает с толку название папки компилятора MinGW64 - для определения версии необходимой SFML эти данные не имеют значения.
Проще говоря, если у вас скачана последняя, доступная на 28 марта 2017 года версия DEV C++, то к ней нужна библиотека SFML версии GCC 4.8.1 TDM (SJLJ).
Далее я буду приводить решение, ориентированное именно на эти версии IDE и библиотеки SFML.
-
Итак, скачиваем 32-х разрядную и 64-разрядную версии библиотеки SFML GCC 4.8.1 TDM (SJLJ).
Зеркало здесь: -
Распаковываем оба архива в отдельные папки на жестком диске (лучше, чтобы путь не содержал кириллических символов). Например , 32-х разрядную версию распакуем в папку D:\Soft\Dev-Cpp\SFML-2.2-32, а 64-х разрядную - в папку D:\Soft\Dev-Cpp\SFML-2.2-64.
-
Чтобы проверить то, что мы выбрали правильную версию библиотеки SFML, соответствующую компилятору GCC, нужно запустить какой-либо исполняемый файл из папки examples для любой разрядности.
Для примера рассмотрим 32-х разрядную версию и папку примера Pong:
-
Из папки Dev-Cpp\MinGW64\bin в папку Dev-Cpp\SFML-2.2-32\examples\pong копируем два файла:
libgcc_s_sjlj-1.dll
libstdc++-6.dll
-
Из папки Dev-Cpp\SFML-2.2-32\bin в папку Dev-Cpp\SFML-2.2-32\examples\pong копируем шесть файлов:
libsndfile-1.dll
openal32.dll
sfml-audio-2.dll
sfml-graphics-2.dll
sfml-system-2.dll
sfml-window-2.dll
-
Запускаем Pong.exe - игра должна запуститься без ошибок.
Для 64-х разрядной версии, аналогично:
-
Из папки Dev-Cpp\MinGW64\bin в папку Dev-Cpp\SFML-2.2-64\examples\pong копируем два файла:
libgcc_s_seh_64-1.dll
libstdc++_64-6.dll
-
Из папки Dev-Cpp\SFML-2.2-64\bin в папку Dev-Cpp\SFML-2.2-64\examples\pong копируем шесть файлов:
libsndfile-1.dll
openal32.dll
sfml-audio-2.dll
sfml-graphics-2.dll
sfml-system-2.dll
sfml-window-2.dll
-
Запускаем Pong.exe - игра должна запуститься без ошибок.
Из этих библиотек можно сформировать два архива - для 32-х и 64-х разрядных приложений. Они понадобятся для запуска скомпилированных exe-файлов. Эти библиотеки должны находиться в одной папке с исполняемым файлом (либо путь до них следует прописать в системную переменную PATH).
Скачать эти архивы можно здесь:
-
-
Переходим к настройке самой среды разработки DEV C++. Открываем «Сервис» -> «Параметры компилятора» -> вкладка «Компилятор»;
-
Для каждого набора настроек компилятора добавляем новые параметры в поле «Добавить эти команды к командной строке компоновщика» (порядок следования ключей важен, так как сначала должны идти подключения зависимых библиотек, а только после этого - подключения библиотек, от которых они зависят. Так, graphics зависит от window, а window, в свою очередь зависит от system, поэтому подключаются они в порядке graphics - window - system):
Код: Выделить всё
-lsfml-graphics -lsfml-window -lsfml-audio -lsfml-system
-
Переходим к вкладке «Каталоги» и так же, для каждого набора настроек компилятора прописываем пути для:
-
«Библиотек»:
-
для 32-х разрядной версии - D:\Soft\Dev-Cpp\SFML-2.2-32\lib
-
для 64-х разрядной версии - D:\Soft\Dev-Cpp\SFML-2.2-64\lib
-
-
«Включаемых файлов C»:
-
для 32-х разрядной версии - D:\Soft\Dev-Cpp\SFML-2.2-32\include
-
для 64-х разрядной версии - D:\Soft\Dev-Cpp\SFML-2.2-64\include
-
-
«Включаемых файлов C++»:
-
для 32-х разрядной версии - D:\Soft\Dev-Cpp\SFML-2.2-32\include
-
для 64-х разрядной версии - D:\Soft\Dev-Cpp\SFML-2.2-64\include
-
Примечание: Обратите внимание, что после каждого добавления пути нужно нажимать «ОК», иначе изменения не сохраняются.
-
На этом настройка IDE DEV C++ закончена.
Замечание 1: Помним, что для правильной работы скомпилированных файлов, необходимо в одну папку с ними добавить файлы библиотек, архивы с которыми можно скачать по ссылке чуть выше.
Замечание 2: Не забываем указывать набор настроек правильной разрядности для корректной компиляции, иначе при попытке выполнения скомпилированного файла получим ошибку.
Замечание 3: Для работы с библиотеками OpenGL в настройках DEV C++ к командной строке компоновщика (п.6 данной инструкции) нужно добавить опцию -lopengl32
Дополнение 1:
Если установлен компилятор GCC MinGW версии GCC 6.1.0 MinGW (DW2) - 32-bit (GCC 6.1.0 MinGW (SEH) - 64-bit), то необходимые файлы качаем отсюда (проверил - эти же файлы подходят для компилятора GCC MinGW Builds 5.3.0):
-
Для компилятора версии GCC 6.1.0 MinGW (DW2) - 32-bit:
-
Сам компилятор MinGW Builds 6.1.0 (32-bit).(Зеркало здесь);
-
Архив с библиотеками, необходимыми для запуска исполняемых файлов.
-
-
Для компилятора версии GCC 6.1.0 MinGW (SEH) - 64-bit:
-
Сам компилятор MinGW Builds 6.1.0 (64-bit).(Зеркало здесь);
-
Архив с библиотеками, необходимыми для запуска исполняемых файлов.
-
Дополнение 2:
На одном из компьютеров у меня упорно не хотел запускаться скомпилированный под SFML 2.4.2 (и 32-х, и 64-х разрядный) файл с подключенной библиотекой SFML. Причем, exe-шник нормально компилировался в DEV C++ (настроенной по инструкции выше), но при запуске сразу вылетал с ошибкой. Так же происходило и с готовыми exe-шниками из вложенных в SFML примеров.
Очевидно, что какое-то ПО в системе конфликтовало с одной или несколькими библиотеками, используемыми компилятором TDM-GCC 4.9.2, который установлен по умолчанию в DEV C++ 5.11 либо с библиотеками, используемыми SFML версии GCC 4.9.2 TDM (SJLJ). Исходя из этой предпосылки, я попытался скопировать в папку с exe-файлом различные библиотек dll, которые использует сам компилятор и подключенная библиотека SFML, но это не принесло никакого результата.
При этом, готовые примеры из библиотеки SFML для GCC 6.1.0 MinGW с соответствующими компиляторами (MinGW 5.3.0 и MinGW 6.1.0) отрабатывали нормально. То есть, скачав SFML для GCC 6.1.0 MinGW и компилятор, я брал скомпилированные файлы из примеров SFML, копировал к ним в папку необходимые библиотеки dll (как описано на 4-м шаге инструкции, но немного другие версии библиотек - так как каждый компилятор требует разные dll-ки. В данном случае, из папки bin компилятора нужно было брать libgcc_s_dw2-1.dll и libstdc++-6.dll для 32-х разрядной и libgcc_s_seh-1.dll, libstdc++-6.dll и libwinpthread-1.dll для 64-х разрядной версии. Из папки библиотеки SFML\bin нужно копировать те же файлы, что и в п.4 инструкции, кроме libsndfile-1.dll).
Поэтому, было решено добавить к IDE Dev C++ новые компиляторы, рекомендованные к использованию с SFML версии GCC 6.1.0 MinGW. Пошагово это выглядит так:
-
Скачиваем наборы библиотеки SFML версии GCC 6.1.0 MinGW для 32-х и 64-х разрядных систем;
-
Распаковываем их в папку с установленным Dev C++, каждую в отдельную папку;
-
Скачиваем рекомендованные на SFML версии компиляторов MinGW Builds 6.1.0 (32-bit), MinGW Builds 6.1.0 (64-bit);
-
Распаковываем каждый архив в любую отдельную папку на диске, при этом желательно, чтобы путь был без пробелов и не содержал кириллические символы;
-
В Dev C++ заходим в «Сервис» -> «Параметры компилятора» и добавляем новые наборы настроек компиляторов для 32-х и 64-х разрядных версий, указывая путь, куда на предыдущем шаге были распакованы соответствующие компиляторы:
-
Для каждого набора настроек прописываем настройки на вкладке «Компилятор», согласно п 4.6 инструкции выше;
-
Для каждого набора настроек прописываем используемые папки на всех вкладках вкладки «Каталоги», так же как это сделано в уже созданных наборах, но во-первых, изменяя пути до конечной папки а во-вторых, вместо путей к старым папкам библиотеки SFML версии GCC 4.9.2 TDM (SJLJ), указываем пути к новым папкам библиотеки SFML версии GCC 6.1.0 MinGW, которые мы скачали и распаковали в отдельные папки внутри Dev C++ несколькими шагами ранее:
-
Остальные настройки можно оставить по умолчанию
Теперь, для работы с библиотекой SFML используем новые наборы настроек компилятора. Они могут быть несовместимы с какими-либо из ранее установленных библиотек, используемых в Dev C++, поэтому, для предыдущих своих проектов продолжаем использовать старые наборы настроек.