Предполагается, что вы загрузили 32-битную версию SFML для MinGW и хотите скомпилировать программы, написанные на Atom, из командной строки 1 .Внутри папки SFML, которую вы только что загрузили, есть три папки, которые важны для нас прямо сейчас: bin, lib и include.
Папка bin содержит библиотеки DLL.В этом ответе я расскажу только о динамических ссылках на SFML, так как с этим у меня есть опыт.Для запуска любого динамически связанного исполняемого файла, созданного с использованием SFML, вам необходимо скопировать все соответствующие библиотеки DLL в ту же папку, что и исполняемый файл.(Какие из них актуальны? Простое решение - просто скопировать их все. 2 )
В папке lib содержатся библиотеки (файлы с расширением .a).Если вы перейдете в папку, в которую вы установили MinGW (по умолчанию это C: \ MinGW), а затем перейдете по пути \ lib \ gcc \ mingw32 \ 8.2.0, вы должны оказаться в папке с несколькими подпапками, некоторые из них .oфайлы и куча .a файлов.Скопируйте сюда все файлы из папки SFML lib.Теперь MinGW знает о библиотеках SFML.
Наконец, папка include содержит папку с именем SFML, которая содержит все заголовочные файлы SFML.Скопируйте папку SFML.Теперь запомните папку, в которую мы сбросили все файлы .a на последнем шаге?Эта папка должна иметь подпапку с именем include, которая содержит папку с именем C ++, которая содержит все стандартные заголовки C ++ (iostream, алгоритм и т. Д.).В эту папку C ++ вставьте папку SFML, которую мы взяли всего секунду назад.(Не содержимое папки, а скорее сама папка.) Теперь MinGW знает о заголовках SFML, поэтому мы можем безопасно набрать, например, #include <SFML/Graphics.hpp>
Например, чтобы скомпилировать файл main.cpp в конце этого урока и динамически связать его с Atom, вы должны запустить команду g++ main.cpp -lsfml-graphics -lsfml-window -lsfml-system
внутри cmd.exe.
Отказ от ответственности: Копирование библиотек и папок включения , а не метод, рекомендованный SFML.Вместо этого они предлагают использовать аргументы командной строки, чтобы сообщить g ++, где искать.Но IMO (1) их метод больше беспокоит начинающих пользователей, и (2) начинающие пользователи вряд ли будут использовать несколько компиляторов или несколько версий SFML.(Если вы используете несколько компиляторов или несколько версий SFML, вы захотите сделать это по-своему. В этом случае дайте мне знать, и я постараюсь помочь.)
1) Возможно, вы действительно хотите скомпилировать непосредственно в Atom одним нажатием кнопки (F5 по умолчанию?).Если вы уже знаете, как компилировать не-SFML-приложения непосредственно в Atom, то я думаю, что вышесказанного должно быть достаточно и для того, чтобы компилировать SFML-приложения, если вы правильно установите флаги компилятора по умолчанию в Atom.(Под этим я подразумеваю: для приведенного выше примера ваши флаги должны включать -lsfml-graphics
, -lsfml-window
и -lsfml-system
, в этом порядке).
2) Чтобы выяснить, какие DLL вам нужны, вы можетедобавьте их все и начните удалять, пока ваше приложение не будет работатьИли помните об этих трех вещах:
- Вам всегда нужен openal32.dll
- Вам нужны библиотеки DLL, с которыми вы связались при компиляции
- Вам нужны версиис "-d" (например, sfml-graphics-d-2.dll), если вы компилируете в режиме отладки, и вам нужны версии без него, в противном случае
Так в случае примераВыше нужны только openal32.dll, sfml-graphics-2.dll, sfml-window-2.dll и sfml-system-2.dll.