SFML работает только в режиме отладки

Я пытаюсь запустить эту простую программу SFML C++ в Visual Studio 2012. Она отлично работает в режиме отладки, но как только я использую неотладочные библиотеки и библиотеки DLL, программа выдает исключение нарушения прав доступа в первой строке кода. Если я удалю задание (и зависимости задания) и просто запущу 'sf::VideoMode::getFullscreenModes();' это работает нормально.

У меня есть динамически связанные библиотеки.

#include <SFML/System.hpp>
#include <SFML/Window.hpp>
#include <SFML/OpenGL.hpp>
#include <iostream>

int main(int argCount, char** argVector) {
    std::vector<sf::VideoMode> vm = sf::VideoMode::getFullscreenModes(); // Access Violation in Non-Debug Mode

    sf::VideoMode videoMode;
    for(unsigned i = 0; i < vm.size(); i++) {
        if(vm[i].isValid()) {
            videoMode = vm[i];
            break;
        }
        std::cout << "Invalid VideoMode: " << i << std::endl;
    }
    sf::Window window(videoMode, "SFML OpenGL", sf::Style::Fullscreen);
    glClearDepth(0.5F);
    glOrtho(0, 1, 0, 1, 0, 1);
    std::cout << glGetError();
    glColor3f(0, 1, 0);
    {
        glBegin(GL_QUADS);
        glVertex3i(0, 0, 0);
        glVertex3i(0, 1, 0);
        glVertex3i(1, 1, 0);
        glVertex3i(1, 0, 0);
        glEnd();
    }

    window.display();
    while(window.isOpen()) {}
    return 0;
}

person Jeroen    schedule 21.07.2013    source источник


Ответы (1)


Краткий ответ: вы не можете смешивать двоичные файлы отладки/релиза.

Цитируя официальное руководство по SFML для Visual Studio:

Важно связать библиотеки, соответствующие конфигурации: «sfml-xxx-d.lib» для отладки и «sfml-xxx.lib» для выпуска. Плохая смесь может привести к сбоям.

Оно выделено красным здесь.

person Hiura    schedule 21.07.2013