基本的OpenGL程序崩溃,但与gdb一起工作

Basic OpenGL program crashes, but works with gdb

本文关键字:但与 gdb 一起 工作 崩溃 OpenGL 程序      更新时间:2023-10-16

我复制了OpenGL参考指南中的第一个程序,用于一个非常基本的GLUT OpenGL程序。

我正在使用Code::Blocks IDE并在Ubuntu 12.10上运行。

我使用的是带有fglrx驱动程序的ATI Mobile Radeon 4670。

我使用这段代码来确保我的环境正常工作。下面是代码:

#include <GL/glut.h>
#include <stdlib.h>
void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_POLYGON);
        glVertex3f(0.25,0.25,0.0);
        glVertex3f(0.75,0.25,0.0);
        glVertex3f(0.75,0.75,0.0);
        glVertex3f(0.25,0.75,0.0);
    glEnd();
    glFlush();
}
void init(void)
{
    glClearColor(0.0,0.0,0.0,0.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0.0,1.0,0.0,1.0,-1.0,1.0);
}
int main(int argc, char** argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(250,250);
    glutInitWindowPosition(100,100);
    glutCreateWindow("hello");
    init();
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
}

我认为这是我能运行并希望能编译的最简单的代码。在与include/lib/目录(/usr/include/usr/lib/x86_64-linux-gnu)进行了一些争论之后,我设法使它编译没有错误。

当从Code::Blocks内运行或使用终端时,我得到一个分段错误。出现一个窗口的影子,但随后它被销毁,程序退出。

真正奇怪的是当我试着调试它的时候。在Code::Blocks中选择"Debug",或者在命令行上自己使用gdb(先运行gdb <program>,然后运行run),它运行得很好。没有遇到任何错误或问题,并按预期执行。

这使得我很难找出问题是什么。我让gdb检查生成的核心文件是否正常执行,但它说的都是

Program terminated with signal 11, Segmentation fault.
#0  0x00007f9ee3a5815c in ?? ()

真的很有帮助。什么好主意吗?我的配置可能有问题,所以请提问。

我不确定,因为我从未使用过glut,但这个网站似乎建议像这样调用glutInitDisplayMode

glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);

而你这样称呼它

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);

比较这两个让我想知道你是否应该交换你的两个参数?

编辑:
别管我,我是弱智。这不是两个参数,当然><它们只是"OR"。现在是早上9点,我还没睡,所以请原谅我的愚蠢:<