Как я могу поделиться своей игрой SFML с другими без ошибок? - PullRequest
3 голосов
/ 14 июня 2019

Итак, я закончил игру на C ++ / SFML и хотел бы отправить ее кому-нибудь, но при ее отправке возникают ошибки: я протестировал exe-файл на другом компьютере с необходимыми SFML-библиотеками DLL, и он показывает мне, что libstdc ++ - 6.dll отсутствует, поэтому я добавил его и попробовал еще раз, и он говорит мне, что все еще отсутствуют другие dll, это очень неловко. Как я могу поделиться своей игрой без всех этих ошибок и отсутствующих DLL?

Ответы [ 4 ]

3 голосов
/ 14 июня 2019

Вы можете использовать Dependency Walker (зависимость.exe), чтобы найти все библиотеки DLL, которые использует ваше приложение.Для обнаружения необходимых вам все еще потребуются циклы проб и ошибок, но по крайней мере у вас есть с чего начать.Скорее всего, вам понадобятся dll, предоставляемые компилятором, и dll дополнительных библиотек, которые вы используете.Скорее всего, вам ничего не понадобится из папки System32.

1 голос
/ 27 июня 2019

Как сказал @ aj.toulan, вам нужно статически связывать SFML.Я предполагаю, что вы разрабатываете на Windows с использованием Visual Studio.Когда вы загружаете и настраиваете SFML, в нем уже есть статические библиотеки.

Если вы используете какие-либо внешние библиотеки, вам необходимо создать их статическую версию!

Вынеобходимо добавить определение препроцессора для SFML_STATIC в свойствах проекта.

  1. Перейти к свойствам проекта
  2. Перейти на вкладку C / C ++
  3. Препроцессор
  4. Добавить "SFML_STATIC;"в начале Определений препроцессора и нажмите Enter.
  5. Применить

Теперь вам нужно включить статические библиотеки.Какие бы библиотеки SFML вы не использовали в своем проекте, но добавляете "-s"

Например, комментарий #pragma (lib, "sfml-graphics-s.lib")

SFML используетopenal32.lib и из-за лицензирования вам нужно будет иметь эту DLL в папке с вашим exe

#ifndef SFML_STATIC
#pragma comment(lib,"sfml-graphics-s.lib")
#pragma comment(lib,"freetype.lib")
#pragma comment(lib,"opengl32.lib")
#pragma comment(lib,"sfml-system-s.lib")
#pragma comment(lib,"winmm.lib")
#pragma comment(lib,"sfml-window-s.lib")
#pragma comment(lib,"gdi32")
#pragma comment(lib,"winmm")
#pragma comment(lib,"sfml-audio-s.lib")
#pragma comment(lib,"flac.lib")
#pragma comment(lib,"ogg.lib")
#pragma comment(lib,"vorbisenc.lib")
#pragma comment(lib,"vorbisfile.lib")
#pragma comment(lib,"vorbis.lib")
#pragma comment(lib,"openal32.lib")
#pragma comment(lib,"sfml-main.lib")
#pragma comment(lib,"sfml-network-s.lib")
#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib,"openal32.lib")
//include below line if you want to hide console window
#pragma comment(linker, "/SUBSYSTEM:windows /ENTRY:mainCRTStartup")
#endif // !SFML_STATIC

Ссылка на SFML FAQ, показывающая, что вам нужно включить для каждой библиотеки, когдастатическое связывание

1 голос
/ 19 июня 2019

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

Вам придется клонировать SFML-репозиторий и использовать CMake для создания проекта Visual Studio , который позволит вам статически строить SFML с / MTd для отладки и / MT для выпуска.Эти опции можно найти в Project Properties > C/C++ > Code Generation > Runtime Library.

0 голосов
/ 14 июня 2019

Вы должны проверить исполняемый файл со всеми DLL-библиотеками компилятора.

libstdc ++ - 6.dll - это DLL-файл, который находится в папке компилятора.Таким образом, вы должны проверить это со всеми dll компилятора.

Надеюсь, это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...