Я использую 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;
}
Моя система выглядит так:
Я ищу ваши предложения и рекомендации, которые помогут мне выяснить, что может привести к тому, что эта строка кода будет работать в режиме отладки, но не в режиме выпуска.
Спасибо! :)
Я использую qmake для этого проекта. Он создает три файла make:
Я не очень опытен с make файлами, но я могу видеть некоторую информацию о библиотеках, которые связаны в файлах отладки и выпуска.
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
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:
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).
Спасибо, луискубал, за то, что указал мне в правильном направлении, задав мне вопросы о компоновщике. :)