基本的OpenGL程序崩溃,但与gdb一起工作
Basic OpenGL program crashes, but works with gdb
我复制了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点,我还没睡,所以请原谅我的愚蠢:<
- vs 2015 constexpr变量不恒定,但与2019相比还好吗
- 结构字段名称与 GDB 中的 STL 数组冲突
- 如何打印源文件中与 GDB 中的程序流关联的所有行号
- 为什么 std::count 比 MSVC 编译器的普通循环慢,但与 GCC 相等?
- 为什么我从 gdbserver 获得"not in executable format: Success",但在 gdb 中一切正常?
- 用于与GDB一起使用的MakeFile
- Googletest 在 bazel test 中永远不会失败(在它应该失败的地方),但与 cmake & clion 一起工作
- 左值没有模板匹配 (&&),但与模板匹配 (T &&)?
- 无法与GDB一起进入共享库中的函数
- Boost Spirit代码,可与msvc编译,但与gcc编译错误
- C++指针给出数据类型为"int"的错误,但与"char"一起工作正常
- 使用Windows函数SendMessage会导致与MSVC发生链接错误,但与MinGW不发生链接错误
- 如果它不是json,但与json类似,如何使用boost进行解析
- 转换在Visual Studio 2015中是不明确的,但与clang无关
- 使用 Netbeans IDE 7.0.1 进行C++,如何启用更多调试信息(即与 gdb "-g3"一样)
- 这看起来很相似,但与旧问题不同.给定一个大小为 n 的数组(允许重复的数字),找到缺少的 2 个数字
- 调试Q与GDB调试器
- libmysql mysql_real_connect与IP地址失败,但与本地主机工作
- 我怎么能看到一个c++类如何得到布局在内存与gdb
- 基本的OpenGL程序崩溃,但与gdb一起工作