我复制了 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 中选择“调试”或在命令行上自己使用 gdb(运行 gdb <program>
然后 run
),它运行得很好。没有遇到任何错误或问题,并且按预期执行。
这让我很难找出问题所在。我让 gdb 检查生成的核心文件是否正常执行,但它只说了
Program terminated with signal 11, Segmentation fault.
#0 0x00007f9ee3a5815c in ?? ()
真正的帮助。有任何想法吗?我的配置可能有问题,所以尽管问。
最佳答案
我不确定,因为我从来没有用过 glut,但是 this网站似乎建议像这样调用 glutInitDisplayMode
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
当你这样调用它的时候
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
比较两者让我想知道你是否应该切换你的两个参数?
编辑:
别管我,我是弱智。当然,这些不是 2 个参数 >< 它们只是简单的或运算。现在是早上 9 点,我还没睡,请原谅我的愚蠢:<
关于c++ - 基本 OpenGL 程序崩溃,但适用于 gdb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14098884/