Программа SFML 2.1 работает нормально в режиме отладки, но вылетает в режиме выпуска

0

Я использую Qt Creator для проекта SFML. Проблема, с которой я в настоящее время сталкиваюсь, заключается в том, что мое приложение выйдет из строя на определенной строке кода, только если я запущен в режиме выпуска.

Я удалил приложение, чтобы найти точную строку кода, вызывающую проблему. Вот как выглядит моя вся программа:

Работает в режиме отладки; Аварии в режиме деблокирования

#include <SFML/Graphics.hpp>

int main()
{
    sf::RenderWindow window(sf::VideoMode(800, 600), "SFML Worked!");
    window.setVerticalSyncEnabled(true);

    sf::Shader shader;
    shader.loadFromFile("data\\shaders\\HorizontalBlur.frag", sf::Shader::Fragment);

    return 0;
}

Если я удалю код loadFromFile, он будет отлично работать в обоих режимах отладки и выпуска.

Работает в режиме отладки; Работает в режиме выпуска

#include <SFML/Graphics.hpp>

int main()
{
    sf::RenderWindow window(sf::VideoMode(800, 600), "SFML Worked!");
    window.setVerticalSyncEnabled(true);

    sf::Shader shader;
    //shader.loadFromFile("data\\shaders\\HorizontalBlur.frag", sf::Shader::Fragment);

    return 0;
}

Моя система выглядит так:

  • Windows 8 64-бит
  • Qt Creator 2.8.1
  • GCC 4.8
  • SFML 2.1, скомпилированный с GCC 4.8

Я ищу ваши предложения и рекомендации, которые помогут мне выяснить, что может привести к тому, что эта строка кода будет работать в режиме отладки, но не в режиме выпуска.

Спасибо! :)

Обновление # 1

Я использую qmake для этого проекта. Он создает три файла make:

  • Makefile
  • Makefile.debug
  • Makefile.release

Я не очень опытен с make файлами, но я могу видеть некоторую информацию о библиотеках, которые связаны в файлах отладки и выпуска.

Makefile.debug

LIBS        =        C:/Users/Derek/Documents/Development/Projects/Dots-A-Lot/dependencies/SFML-2.1-windows-gcc-4.8-mingw-32bits/lib/libsfml-main-d.a C:/Users/Derek/Documents/Development/Projects/Dots-A-Lot/dependencies/SFML-2.1-windows-gcc-4.8-mingw-32bits/lib/libsfml-graphics-d.a C:/Users/Derek/Documents/Development/Projects/Dots-A-Lot/dependencies/SFML-2.1-windows-gcc-4.8-mingw-32bits/lib/libsfml-window-d.a C:/Users/Derek/Documents/Development/Projects/Dots-A-Lot/dependencies/SFML-2.1-windows-gcc-4.8-mingw-32bits/lib/libsfml-system-d.a C:/Users/Derek/Documents/Development/Projects/Dots-A-Lot/dependencies/SFML-2.1-windows-gcc-4.8-mingw-32bits/lib/libsfml-audio-d.a C:/Users/Derek/Documents/Development/Projects/Dots-A-Lot/dependencies/SFML-2.1-windows-gcc-4.8-mingw-32bits/lib/libsfml-network-d.a 

Makefile.release

LIBS        =        C:/Users/Derek/Documents/Development/Projects/Dots-A-Lot/dependencies/SFML-2.1-windows-gcc-4.8-mingw-32bits/lib/libsfml-main.a C:/Users/Derek/Documents/Development/Projects/Dots-A-Lot/dependencies/SFML-2.1-windows-gcc-4.8-mingw-32bits/lib/libsfml-graphics.a C:/Users/Derek/Documents/Development/Projects/Dots-A-Lot/dependencies/SFML-2.1-windows-gcc-4.8-mingw-32bits/lib/libsfml-window.a C:/Users/Derek/Documents/Development/Projects/Dots-A-Lot/dependencies/SFML-2.1-windows-gcc-4.8-mingw-32bits/lib/libsfml-system.a C:/Users/Derek/Documents/Development/Projects/Dots-A-Lot/dependencies/SFML-2.1-windows-gcc-4.8-mingw-32bits/lib/libsfml-audio.a C:/Users/Derek/Documents/Development/Projects/Dots-A-Lot/dependencies/SFML-2.1-windows-gcc-4.8-mingw-32bits/lib/libsfml-network.a 

У меня также есть DLL отладки в выходной папке отладки (рядом с исполняемой программой отладки) и DLL выпуска в выходной папке выпуска (рядом с исполняемым файлом выпуска). Папка данных также находится в папках отладки и выпуска, так что у нее есть доступ к файлу шейдера фрагмента.

Теги:
sfml
qt-creator

1 ответ

1
Лучший ответ

Я смог решить свою проблему. Я выполнил эти инструкции для создания SFML:

http://sfml-dev.org/tutorials/2.1/compile-with-cmake.php

Я загрузил g++ 4.8.1 с помощью mingw и использовал это для компиляции SFML. Тем не менее, когда я использовал файлы.a/.dll, созданные этой сборкой, моя версия сборки сработала бы на этой строке кода.

Сегодня (10-7-2013) я нашел следующие инструкции:

https://github.com/LaurentGomila/SFML/wiki/Tutorial%3A-Compile-and-Link-SFML-with-Qt-Creator#step-10

Я просмотрел эти инструкции и использовал компилятор g++ 4.8.0, который поставлялся с Qt Creator (вместо того, который я загрузил). Теперь я могу работать в режиме выпуска без сбоев.

Я не понял, что использовал одну версию компилятора для сборки SFML (g++ 4.8.1), а другой - для создания моего приложения (g++ 4.8.0).

Спасибо, луискубал, за то, что указал мне в правильном направлении, задав мне вопросы о компоновщике. :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню