我正在使用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文件:
我对makefile没有太多经验,但我可以看到有关在调试和发布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。数据文件夹同时位于调试和发布文件夹中,因此它可以访问片段着色器文件。
答案 0 :(得分:1)
我能够解决我的问题。我按照这些说明来构建SFML:
http://sfml-dev.org/tutorials/2.1/compile-with-cmake.php
我用mingw下载了g ++ 4.8.1并用它来编译SFML。但是,当我使用该构建生成的.a / .dll文件时,我的发布版本将在该行代码中崩溃。
今天(10-7-2013)我发现了这些说明:
https://github.com/LaurentGomila/SFML/wiki/Tutorial%3A-Compile-and-Link-SFML-with-Qt-Creator#step-10
我查看了这些说明并使用了Qt Creator附带的g ++ 4.8.0编译器(而不是我下载的那个)。现在我能够在发布模式下运行而不会崩溃。
我没有意识到我正在使用一个版本的编译器来构建SFML(g ++ 4.8.1)而另一个版本来构建我的应用程序(g ++ 4.8.0)。
谢谢你,luiscubal,通过向我询问有关链接器的问题,指出了我正确的方向。 :)