Начиная с версии SFML 2.2, при статической линковке нужно контролировать зависимости подключаемых библиотек. Для новичка это может показаться немного сложным, тем более, что для использования почти всех sfml функций, достаточно вставить в нужное поле VS следующий список:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
"sfml-graphics-s.lib" "freetype.lib" "jpeg.lib" "opengl32.lib" "sfml-window-s.lib" "gdi32.lib" "sfml-audio-s.lib" "flac.lib" "vorbisenc.lib" "vorbisfile.lib" "vorbis.lib" "ogg.lib" "openal32.lib" "sfml-system-s.lib" "winmm.lib" |
(кликабельно)
Не забываем про SFML_STATIC в опциях препроцессора:
В некоторых версиях VS, опции препроцессора могут располагаться в одном из подменю компоновщика.
В большинстве случаев достаточно понимать: сверху идут главные, зависимые от расположенных ниже библиотек. Таблицу зависимостей можно найти в официальном туториале. Обратите внимание на winmm.lib. От нее зависят многие библиотеки, она же не зависит ни от кого, посему находится в самом снизу, сразу после sfml-system-s.lib, которой она так же требуется. Для статической debug версии, к имени библиотеки модуля нужно добавить -s-d, например sfml-system-s-d.lib. В принципе это все, разве что напомню о \include и \lib путях, частенько при создании нового пресета о них забывают.
Немного о том, зачем это нужно. На выходе после сборки у вас будет один исполняемый файл, не требующий прилинкованых библиотек. В плане итогового размера программы, вы платите только за то, что используете. Для конечного релиза, статическая версия в большинстве случаев лучше. Так же для релиза желательно убрать консоль, игрока она лишь напугает (подумает вирус какой, закроет, уничтожив при этом sfml окно).
Из заметных минусов: несколько дольше компиляция, чуть сложнее настройка проекта. Хотя последнее спорно, учитывая что при динамике, для запуска приложения в папку с игрой нужно подкладывать либы. Непосредственно для разработки в этом особо нет смысла, разве что наблюдение за размерами папки проекта для душевного спокойствия.