基本的OpenGL程序崩溃,但与gdb一起使用

时间:2012-12-31 07:38:09

标签: c++ c opengl

我复制了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 ?? ()

真正的大帮助。有任何想法吗?我的配置可能有问题,所以请你离开。

1 个答案:

答案 0 :(得分:1)

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

glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);

虽然你这样称呼它

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);

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

编辑:
没关系我,我被吓倒了。那些不是2个参数的课程&gt;&lt;它们只是简单的OR。这是上午9点,我没有睡觉,所以原谅我的愚蠢:&lt;