我正在将 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 创作者 2.8.1
- 海合会 4.8
- 使用 GCC 4.8 编译的 SFML 2.1
我正在寻找您的建议和指导,以帮助我弄清楚是什么导致这行代码在调试模式下工作,而不是在发布模式下工作。
谢谢!:)
更新#1
我正在为这个项目使用 qmake。它创建了三个 make 文件:
- 生成文件
- Makefile.debug
- Makefile.release
我对 makefile 不是很有经验,但我可以看到一些关于在调试和发布 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。数据文件夹同时位于调试和发布文件夹中,因此它可以访问片段着色器文件。