繁体   English   中英

SFML 2.1程序在调试模式下运行良好,但在发布模式下崩溃

[英]SFML 2.1 program runs fine in debug mode, but crashes in release mode

我正在将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
  • 使用GCC 4.8编译的SFML 2.1

我正在寻找您的建议和指导,以帮助我找出导致此代码行在调试模式下工作的原因,而不是在发布模式下工作的原因。

谢谢! :)

更新#1

我正在为此项目使用qmake。 它创建三个生成文件:

  • 生成文件
  • 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 

我在debug输出文件夹中(调试可执行文件旁边)还有调试DLL,在release输出文件夹中(release可执行文件旁边)有发布DLL。 数据文件夹也位于debug和release文件夹中,因此它可以访问片段着色器文件。

我能够解决我的问题。 我已按照以下说明构建SFML:

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

我已经用mingw下载了g ++ 4.8.1,并用它来编译SFML。 但是,当我使用该版本生成的.a / .dll文件时,我的发布版本将在该行代码上崩溃。

今天(2013年10月7日),我找到了以下说明:

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,谢谢您向我询问有关链接器的问题,从而为我指明了正确的方向。 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM