glfwTerminate() 之后的代码永远不会运行

Code after glfwTerminate() never runs

我一直在尝试一些现代 OpenGL 教程,我遇到了一些似乎很奇怪的行为。这是代码,简化为(几乎)最基本的部分。

#include <iostream>
#include <GL/glew.h>
#include <GLFW/glfw3.h>

using std::cout;
using std::endl;

int main(){
    std::cout << "Begin program" << std::endl;
    glfwInit();
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);

    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);

    GLFWwindow* window = glfwCreateWindow(800, 600, "OpenGL", 0, 0); // Windowed
    glfwMakeContextCurrent(window);
    glewExperimental = GL_TRUE;
    glewInit();

    while(!glfwWindowShouldClose(window))
    {
        glfwSwapBuffers(window);
        glfwPollEvents();
    }
    cout << "before glfwTerminate()" << endl;
    glfwTerminate();
    cout << "after glfwTerminate()" << endl; cout.flush();

    std::cout << "End program" << std::endl;
    return 0;
}

查看GLFW docs,对glfwTerminate()的调用应该不会退出程序,但是在“before glfwTerminate()”之后没有任何输出到控制台,程序结束。

我使用的是 ArchLinux(最新更新),我尝试使用 xfce4 和 KDE(后者的最小安装,只是为了确保它不是 xfce4 问题)。

有人会提示发生了什么事吗?

程序未完成。实际上它正在处理 glfwTerminate() 之后的行,但是 glfw 正在以某种方式改变 stdout 绑定到输出流的方式。

这是一个bug。您可以通过将 cout 更改为 cerr

来确认这一点