Библиотека SFML: странная ошибка

Я изучаю библиотеку SFML, и я выбрал код из учебника. он открывает окно, и я должен снова его закрыть, но когда я закрываю его, он говорит

Debug Error!
Run-Time Check Failure #2 - stack around variable 'App' was corrupted.

and then the console stops working.
this is my code:

int main()
{
// Create the main window
sf::Window App(sf::VideoMode(800, 600, 32), "SFML Events");

while (App.IsOpened())
{
// Process events
sf::Event Event;
while (App.GetEvent(Event))
{
// Close window : exit
if (Event.Type == sf::Event::Closed)
App.Close();

// Escape key : exit
if ((Event.Type == sf::Event::KeyPressed) && (Event.Key.Code == sf::Key::Escape))
App.Close();
}

// Display window on screen
App.Display();
}

return EXIT_SUCCESS;// = return 0
}

ссылки на библиотеки отладки

sfml-system.lib
sfml-window.lib
sfml-system-d.lib//these are debug files
sfml-window-d.lib

если я удаляю первые 2 и собираю свою программу, она не выдает ошибок, но когда я ее открываю, она говорит:

приложение не удалось запустить правильно (0xc0150002). нажмите кнопку ОК, чтобы закрыть приложение

У меня есть 64-битный компьютер. и в Microsoft vc ++ 2010 я могу сделать решение для сборки или отладки, и я всегда делаю решение для сборки.

и я строю в режиме релиза, но я также попробовал оба, и они оба не работали

Может кто-нибудь, пожалуйста, скажите мне, что я мог сделать, чтобы предотвратить это или как это происходит.

2

Решение

Для этих проблем запуска приложения, это всегда хорошая идея, чтобы проверить, все ли dll в закрытии зависимости доступны — то есть они все в поисковой переменной PATH? Мы обычно используем ходок зависимости чтобы проверить, какие библиотеки отсутствуют, или используйте GFLAGS для диагностики во время выполнения

Хотя размещение ваших dll с вашим exe-файлом в одной и той же папке работает, оно плохо масштабируется, но обычно я делаю путь к пути библиотеки в переменной окружения PATH.

И одна вещь, на которую следует обратить внимание, sfml поставляется с предварительно собранной библиотекой для vs2005 и vs2008, так как вы используете vs2010, базовая библиотека времени выполнения c (msvcrt) отличается, могут возникнуть потенциальные проблемы — вам лучше собрать sfml из исходного кода самостоятельно, используя vs2010 или используйте vs2005 / vs2008, просто чтобы быть последовательным

1

Другие решения

Если вы не хотите использовать DLL и хотите скомпилировать SFML в exe, вот учебник:
2,0 http://www.sfml-dev.org/tutorials/2.0/start-vc.php
вам нужно добавить директиву препроцессора SFML_STATIC и включить в компоновщик дополнительные библиотеки, которые вы используете в своей программе -> input

0

У меня также были некоторые связанные проблемы, когда я впервые использовал это (и эквивалентные библиотеки). Вот несколько моментов, которые стоит учесть:

  1. Не используйте предварительно скомпилированные библиотеки / библиотеки DLL. Узнайте, как использовать CMake, boost_build (библиотеки boost), Scons (mongoDB) и т. Д. И создавать библиотеки в соответствии с используемым в настоящее время компилятором / платформой (конечно, если есть такая возможность). Через некоторое время этот процесс стал довольно легким и простым, и это сэкономит много времени позже для других проектов.
  2. Прочитайте учебники SFML по созданию простого проекта. Их легко читать и понимать. Можно также сгенерировать примеры с CMake и собрать их, чтобы увидеть, как они работают. Другим хорошим учебником является книга по программированию на SFML (которая сильно использует C ++ 11, что я считаю великолепным).
  3. Как указано выше, добавьте SFML_STATIC в «Определения препроцессора», если не хотите использовать библиотеки DLL, и я думаю, что лучше установить «Windows (/ SUBSYSTEM: WINDOWS)» в параметрах компоновщика (если я правильно понял из «, и консоль перестает работать» » заявление).
  4. Лучше поместить libsndfile-1.dll и openal32.dll в папку release / debug, где генерируется приложение, из того, что я видел, VC ++ плохо работает при поиске dll по указанным путям.
0
По вопросам рекламы [email protected]