Форум программистов, компьютерный форум, киберфорум
SFML
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
 Аватар для Bogradan
8 / 7 / 1
Регистрация: 22.03.2016
Сообщений: 343

Исправление Release сборки

29.03.2025, 13:40. Показов 3389. Ответов 39
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте уважаемые кодеры. Помогите понять что сделать чтобы release сборка запустилась. Я перепробовал sfml туториал, но всё-равно не работает. Помогите мне по порядку вместе со мной задать верные действия и скопировать верные файлы в верный путь. Я только начал изучать sfml и поэтому элементарных вещей не понимаю, но работает проект только в debug, а мне нужно сразу в release чтобы понять сразу и потом было легче. Сборка у меня "Release x86".
Миниатюры
Исправление Release сборки   Исправление Release сборки   Исправление Release сборки  

Исправление Release сборки   Исправление Release сборки   Исправление Release сборки  

0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.03.2025, 13:40
Ответы с готовыми решениями:

DirectX при компиляции в release пропадают цвета
Доброго времени суток. У меня следующая проблема: работаю в связке direct3d + qt + mingw. При сборке debug все работает как надо. При...

Использование указателя на COM объект после вызова Release
Всем привет. Допустим у меня есть ID3D11ShaderResourceView* pTexture; загружаю в него текстуру и использую, потом я вызвал у этого...

SFML и конфигурация Release
Здравствуйте, уважаемы посетители форума. Вопрос по поводу злосчастного движка SFML (2.2) и его отношений с Visual Studio (13). Я создал...

39
 Аватар для Bogradan
8 / 7 / 1
Регистрация: 22.03.2016
Сообщений: 343
30.03.2025, 12:31  [ТС]
Студворк — интернет-сервис помощи студентам
Я хочу чтобы игра работала на 32 битных системах, зачем мне 64..
1
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2551 / 2065 / 971
Регистрация: 09.10.2013
Сообщений: 4,904
Записей в блоге: 4
30.03.2025, 12:56
Цитата Сообщение от Bogradan Посмотреть сообщение
Я хочу чтобы игра работала на 32 битных системах, зачем мне 64..
Хм. а разве есть Windows 10 32bit?
Я серьёзно не видел...
1
 Аватар для Bogradan
8 / 7 / 1
Регистрация: 22.03.2016
Сообщений: 343
30.03.2025, 14:49  [ТС]
в интернете написано, что если сделать игру x32, то она будет идти на разных системах, увеличится совместимость, и смогут запускать даже на слабых системах, а не только на х64. Я хочу адаптацию не только под х64, но и под х32, чтобы больше пользователей смогли играть в мою игру.
1
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2551 / 2065 / 971
Регистрация: 09.10.2013
Сообщений: 4,904
Записей в блоге: 4
30.03.2025, 14:58
Цитата Сообщение от Bogradan Посмотреть сообщение
в интернете написано, что если сделать игру x32
Инструкция по настройке проекта с нуля прекрасно подходит как для x64 так и для x32
Кроме того - Вы можете в одном проекте использовать оба варианта.
Просто немного измените инструкцию для своих нужд.
Дерзайте!
1
 Аватар для Bogradan
8 / 7 / 1
Регистрация: 22.03.2016
Сообщений: 343
30.03.2025, 15:29  [ТС]
Спасибо. Я же сделал по вашей инструкции всё, код читается он даже не красный, он жалуется что не найдет файл "проект.exe", видимо проблема не в самом sfml, я не знаю в чём. Я думаю то что я сделал по вашей инструкции всё работает, но в проекте не создаётся .exe файл, сам значок запуска приложения.

Добавлено через 9 минут
Вы не знаете почему у меня может не быть exe файла в проекте?
0
9988 / 2960 / 497
Регистрация: 05.10.2013
Сообщений: 8,128
Записей в блоге: 243
30.03.2025, 15:32
Цитата Сообщение от Max Dark Посмотреть сообщение
В чем то да.
Но там заморочки с путями к dll вылезают.
И я не уверен, что на данный момент "из коробки" есть поддержка SFML 3.x
Есть поддержка SFML 3 на CMake. У них даже есть ссылка в описании на странице GitHub на CMake-template для начинающих, где используется SFML 3, а установка SFML происходит через FetchContent. Если установлены VS 2022, CMake Tools и Git, то можно просто открыть этот template из VS2022: "File" > "Open" > "CMake" и выбрать файл "CMakeLists.txt" из папки "cmake-sfml-project". При запуске примера автоматически будет скачен и собран SFML 3. Лично мне такой вариант с FetchContent не нравится, так как если делать много маленьких учебных примеров, но долго ждать и тратится много места. Мне больше нравится вариант, когда один раз скачиваешь собранную библиотеку из Releases, копируешь в одну общую папку "libs" и используешь find_package. Папку к "bin" один раз нужно добавить в переменную окружения PATH.

Я прикрепил пример, где подключение через find_path и SFML подключён через локальный путь в CMakePresets.json, то есть я скопировал собранный SFML в локальную папку libs и подключил "./libs/SFML-3.0.0/lib/cmake/SFML" в файле CMakePresets.json для "Debug" и "Release":

JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
        {
            "name": "x64-debug",
            "displayName": "x64 Debug",
            "inherits": "windows-base",
            "architecture": {
                "value": "x64",
                "strategy": "external"
            },
            "cacheVariables": {
                "CMAKE_BUILD_TYPE": "Debug",
                "SFML_DIR": {
                    "value": "./libs/SFML-3.0.0/lib/cmake/SFML",
                    "type": "PATH"
                }
            }
        },
        {
            "name": "x64-release",
            "displayName": "x64 Release",
            "inherits": "x64-debug",
            "cacheVariables": {
                "CMAKE_BUILD_TYPE": "Release",
                "SFML_DIR": {
                    "value": "./libs/SFML-3.0.0/lib/cmake/SFML",
                    "type": "PATH"
                }
            }
        },
По идее, этот проект должен заработать сразу если его открыть в VS2022: "File" > "Open" > "CMake" и выбрать файл "CMakeLists.txt". Вот только архив получается весом 27 MB если его сжимать в ZIP, а форум поддерживает 25 MB. Но в RAR получилось 18.8 MB. Путь к "libs\SFML-3.0.0\bin" нужно добавить в переменную окружения среды PATH.

CMakeLists.txt

Code
1
2
3
4
5
6
7
8
9
10
11
12
cmake_minimum_required(VERSION 3.20)
 
project(hello-sfml3)
 
add_executable(app)
 
target_sources(app PRIVATE
    src/main.cpp
)
 
find_package(SFML 3.0 COMPONENTS System Window Graphics REQUIRED)
target_link_libraries(app SFML::System SFML::Window SFML::Graphics)
src/main.cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <SFML/Graphics.hpp>
 
int main()
{
    auto window = sf::RenderWindow(sf::VideoMode({ 400u, 300u }), "CMake SFML Project");
    window.setFramerateLimit(144);
 
    while (window.isOpen())
    {
        while (const std::optional event = window.pollEvent())
        {
            if (event->is<sf::Event::Closed>())
            {
                window.close();
            }
        }
 
        window.clear();
        window.display();
    }
}
Вложения
Тип файла: rar hello-sfml3.rar (18.83 Мб, 3 просмотров)
1
9988 / 2960 / 497
Регистрация: 05.10.2013
Сообщений: 8,128
Записей в блоге: 243
30.03.2025, 15:49
Bogradan, вы не могли бы попробовать скачать мой архив выше и открыть файл CMakeLists.txt через меню: "File" > "Open" > "CMake". Запустится ли? Это займёт несколько секунд. Очень хочется узнать, сработает ли подключение SFML 3 по относительным путям на другом компьютере. У меня работает - я, конечно, запускаю проект перед публикацией.
0
 Аватар для Bogradan
8 / 7 / 1
Регистрация: 22.03.2016
Сообщений: 343
30.03.2025, 15:54  [ТС]
У меня нет Cmake, и я не люблю это, как я понял интерфейсная аналогия Windows Forms для SFML. Я не работаю с инструментами если не знаю самих основ программирования в движке, это как браться за работу в которой нет навыков никаких. Я лучше научусь создавать простой минимальный sfml проект, это должно быть очень легко, просто я чего-то не понимаю. Смысл этих танцев с бубном. У меня есть вполне читаемый код приведённый Max Dark, я не понимаю куда делся мой ".exe".
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2551 / 2065 / 971
Регистрация: 09.10.2013
Сообщений: 4,904
Записей в блоге: 4
30.03.2025, 16:01
8Observer8, от Вашего архива Гуишному архиватору поплохело
Разархивировал из консоли.
Проект собирается - но проблема с путями.
Миниатюры
Исправление Release сборки  
2
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2551 / 2065 / 971
Регистрация: 09.10.2013
Сообщений: 4,904
Записей в блоге: 4
30.03.2025, 16:05
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Есть поддержка SFML 3 на CMake.
директорию cmake в lib я и не заметил...
1
 Аватар для Bogradan
8 / 7 / 1
Регистрация: 22.03.2016
Сообщений: 343
30.03.2025, 16:05  [ТС]
Я не буду запускать никакой Debug проект, потому что я уже знаю как сделать работающий debug проект, мне нужна только упакованная в release сборка с готовым exe.
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2551 / 2065 / 971
Регистрация: 09.10.2013
Сообщений: 4,904
Записей в блоге: 4
30.03.2025, 16:11
Цитата Сообщение от Bogradan Посмотреть сообщение
Я не буду запускать никакой Debug проект,
А Release собирается так же ка и Debug
Отличие в списке библиотек(они без суфикса "d") и паре настроек компилятора.
А так разницы никакой.

А почему не компилируется ваш проект - он у вас криво настроен - вы настроили только debug, но не настроили release.
Что, как и куда прописывать вам уже несколько раз показывали.
1
 Аватар для Bogradan
8 / 7 / 1
Регистрация: 22.03.2016
Сообщений: 343
30.03.2025, 16:11  [ТС]
Попробую ещё несколько раз.
0
9988 / 2960 / 497
Регистрация: 05.10.2013
Сообщений: 8,128
Записей в блоге: 243
30.03.2025, 16:29
Цитата Сообщение от Max Dark Посмотреть сообщение
Проект собирается - но проблема с путями.
EXE не находит динамические библиотеки. Главное, что проект собирается, а проблему с путями к DLL для SFML в автоматическом режиме я не решил, ни для SFML 2 дли для SFML 3. Проблема в том, что надо каким-то образом сообщать EXE, где находится папка "bin" c DLL-файлами для SFML. В ручную эту проблему можно решить на месте двумя способами:
  • Добавить путь к SFML/bin в PATH
  • Вручную скопировать нужные DLL из папки SFML/bin к EXE в папку проекта "out\build\x64-debug" и\или "out\build\x64-release"
В автоматическом режиме есть способ, который работает с SDL3:
Code
1
2
3
4
5
# This code copies DLLs to the build directory
add_custom_command(TARGET app POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy_if_different
    $<TARGET_RUNTIME_DLLS:app> $<TARGET_FILE_DIR:app>
)
Этот код копирует все необходимые DLL из SDL3/bin в папку к EXE, но почему-то этот способ не работает ни для SFML2 ни для SFML3.

Добавлено через 17 минут
Цитата Сообщение от Bogradan Посмотреть сообщение
У меня нет Cmake
Скорее всего, он у вас есть, потому что по умолчанию при установке VS2022 отмечена галочка "CMake Tools", то есть VS2022 по умолчанию ставит CMake. Если, конечно, вы не убрали эту галочку в начале.

Цитата Сообщение от Bogradan Посмотреть сообщение
как я понял интерфейсная аналогия Windows Forms для SFML
CMake - это система сборки проектов, например, в EXE для Windows и библиотек в форматы .a, .lib, и .dll. Например, с её помощью можно собрать SFML из исходников. Если вы зайдёте на GitHub-репозиторий SFML, то увидите в исходниках SFML файл CMakeLists.txt - это значит, что вы можете собрать SFML с помощью CMake. У CMake есть два интерфейса взаимодействия с ним - либо из консоли, либо из графического интерфейса пользователя - CMake GUI. Это не аналогия Windows Forms. Когда вы начнёте использовать какие-нибудь библиотеки на C++, кроме SFML, которые не собраны заранее, как SFML, то вам придётся осваивать CMake - лучше начать с CMake-GUI. Например, Box2D для детектирования коллизий не собрана, надо будет собирать самому из исходников с помощью CMake. Может вам нужна будет база данных SQLite, чтобы хранить таблицу рекордов или каких-то данных из игры - SQLite тоже надо будет собирать из исходников. Подавляющее большинство библиотек на C++ не имеют prebuilt и поставляются в виде исходников на GitHub с файлом CMakeLists.txt - что говорит о том, что необходимо собирать с помощью CMake.
1
 Аватар для Bogradan
8 / 7 / 1
Регистрация: 22.03.2016
Сообщений: 343
30.03.2025, 16:40  [ТС]
Max Dark, Всё ура, я научился. Я наконец-то благодаря вам научился создавать проект Release и он работает, и я полностью понял как это делается. Спасибо вам большое всё работает. Теперь я могу делать игрушку и даже запускать её через готовую сборку с exe файлом отдельно в релизном виде без самой платформы Visual Studio, благодарю. Вы не зря старались.
0
9988 / 2960 / 497
Регистрация: 05.10.2013
Сообщений: 8,128
Записей в блоге: 243
04.04.2025, 15:24
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Этот код копирует все необходимые DLL из SDL3/bin в папку к EXE, но почему-то этот способ не работает ни для SFML2 ни для SFML3.
Заработало! Надо было добавить ключевое слово COMMAND_EXPAND_LISTS. Минимальная версия CMake должна быть как минимум - 3.21, так как ключевое слово TARGET_RUNTIME_DLLS появилось в 3.21:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
cmake_minimum_required(VERSION 3.21)
 
project(hello-sfml)
 
add_executable(app)
 
target_sources(app PRIVATE
    src/main.cpp
)
 
#find_package(SFML 2.6 COMPONENTS system window graphics REQUIRED)
#target_link_libraries(app sfml-system sfml-window sfml-graphics)
 
find_package(SFML 3.0 COMPONENTS System Window Graphics REQUIRED)
target_link_libraries(app SFML::System SFML::Window SFML::Graphics)
 
# Copy DLL's to the build directory
add_custom_command(TARGET app POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy_if_different
    $<TARGET_RUNTIME_DLLS:app> $<TARGET_FILE_DIR:app>
    COMMAND_EXPAND_LISTS
)
Если в VS 2022 выбрать "x64 Debug", то при сборки проекта библиотеки с "-d" будут скопированы в папку "x64-debug":



А если выбрать "x64 Release", то будут скопированы релизные библиотеки в папку "x64-release":



При создании нового CMake-проекта, VS 2022 генерирует файл CMakePresets.json, где можно прописать путь к SFML для Debug и Release - один и тот же путь:

JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
        {
            "name": "x64-debug",
            "displayName": "x64 Debug",
            "inherits": "windows-base",
            "architecture": {
                "value": "x64",
                "strategy": "external"
            },
            "cacheVariables": {
                "CMAKE_BUILD_TYPE": "Debug",
                "SFML_DIR": {
                    "value": "E:/libs/SFML-3.0.0-windows-vc17-64-bit/SFML-3.0.0/lib/cmake/SFML",
                    "type": "PATH"
                }
            }
        },
        {
            "name": "x64-release",
            "displayName": "x64 Release",
            "inherits": "x64-debug",
            "cacheVariables": {
                "CMAKE_BUILD_TYPE": "Release",
                "SFML_DIR": {
                    "value": "E:/libs/SFML-3.0.0-windows-vc17-64-bit/SFML-3.0.0/lib/cmake/SFML",
                    "type": "PATH"
                }
            }
        },
src/main.cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <SFML/Graphics.hpp>
 
int main()
{
    auto window = sf::RenderWindow(sf::VideoMode({ 400u, 300u }), "CMake SFML Project");
    window.setFramerateLimit(144);
 
    while (window.isOpen())
    {
        while (const std::optional event = window.pollEvent())
        {
            if (event->is<sf::Event::Closed>())
            {
                window.close();
            }
        }
 
        window.clear();
        window.display();
    }
}
Миниатюры
1
04.04.2025, 20:26

Не по теме:

8Observer8, в сборке SFML от разработчиков есть библиотеки *-s-*
Предположу что это для статической линковки.

0
9988 / 2960 / 497
Регистрация: 05.10.2013
Сообщений: 8,128
Записей в блоге: 243
04.04.2025, 20:59
Цитата Сообщение от Max Dark Посмотреть сообщение
в сборке SFML от разработчиков есть библиотеки *-s-*
Предположу что это для статической линковки.
Да, я пробовал - работает. Я собрал SFML 3 из исходников с помощью CMake-GUI с опциями по умолчанию. По умолчанию SFML 3 собирается в релиз без .dll в статику. В своём проекте в файле CMakeLists.txt нужно добавить строку:
Code
1
set(SFML_STATIC_LIBRARIES TRUE)
А всё остальное так же. Я ещё добавляю следующую POST_BUILD-команду, чтобы папка "assets" со всеми ассетами (спрайты, звуки, шрифты и т.д.) копировалась к EXE:

Code
1
2
3
4
5
6
# Copy the assets folder to the dist folder
add_custom_command(TARGET app POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy_directory
    ${CMAKE_SOURCE_DIR}/assets $<TARGET_FILE_DIR:app>/assets
    COMMAND_EXPAND_LISTS
)
Добавлено через 19 минут
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Я собрал SFML 3 из исходников с помощью CMake-GUI с опциями по умолчанию.
В CMake-GUI я выбрал папки "src" и "dist". Выбрал путь установки в поле ввода CMAKE_INSTALL_PREFIX. Нажал кнопки "Configure" и "Generate". Ввел две команды в консоль:
Bash
1
2
cmake --build dist -j4
cmake --install dist
SFML 3 был установлен в папку, указанную в поле ввода CMAKE_INSTALL_PREFIX.
1
 Аватар для Bogradan
8 / 7 / 1
Регистрация: 22.03.2016
Сообщений: 343
12.04.2025, 11:40  [ТС]
Дополнительные фото настроек для тех кто читает но не понял. Повторить lib bin include, копирование в release файлов библиотек, и работать должно 100%.
Миниатюры
Исправление Release сборки   Исправление Release сборки   Исправление Release сборки  

Исправление Release сборки   Исправление Release сборки   Исправление Release сборки  

0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2551 / 2065 / 971
Регистрация: 09.10.2013
Сообщений: 4,904
Записей в блоге: 4
12.04.2025, 17:27
Bogradan, чтобы не завязываться на расположение/название проекта и/или библиотек можно использовать переменные.
$(SolutionDir) - директория с "решением"
$(ProjectDir) - директория с проектом
И так далее.
Весь список переменных и во что они преобразуются можно посмотреть в самих настройках, там где редактируются пути.

Для кроссплатформенных проектов лучше все же использовать CMake.
И библиотеки устанаваливать через пакетные менеджеры(vcpkg, conan, etc...).
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.04.2025, 17:27

SFML в C::B пытается что-то найти в D:\sfml-release\ которого нет
Добрый день, вторые сутки пытаюсь подключить SFML библиотеку к C::B. При подключении по мануалу с офф сайта любой версии SFML к любой...

В режиме Release пропадают значения переменных
Здравствуйте, уважаемые форумчане! Помогите разобраться с проблемкой. Программа запускается без ошибок в режиме отладки(debug), всё...

Недопустимый или поврежденный файл в release
Ввел в ввод -&gt; доп. зависимости все dll для релиза, также засунул их прямо в директорию с проектом, но почему-то компилятор ругается на...

CodeBlock SFML не создает release
Писал стрелялки на ФЛАШе, но после того как он накрылся, ищу альтернативу. Поставил CodeBlock и SFML, настроил. Из Кодблока компилируется,...

Не могу откомпилировать проект под Release x64
Доброго времени суток, форумчане!!!! У меня ошибка в тестовом коде при компиляции в Release x64 Если кто-то что-то знает и хочет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru