考虑一个非常简单的OpenGL程序:
#include <GL/glut.h>
static void RenderScene()
{
glClear(GL_COLOR_BUFFER_BIT);
glutSwapBuffers();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowSize(500, 500);
glutCreateWindow("OpenGL Test");
glutDisplayFunc(RenderScene);
glClearColor(0.3f, 0.3f, 0.3f, 0.0f);
glutMainLoop();
return 0;
}
编译并运行正常,按预期显示灰色窗口。
然后,在OpenGL处理之前,我将三个变量引入main函数。代码变为:
#include <string>
#include <GL/glut.h>
static void RenderScene()
{
glClear(GL_COLOR_BUFFER_BIT);
glutSwapBuffers();
}
int main(int argc, char** argv)
{
int x = 5;
char y = 'a';
std::string z = "abc";
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowSize(500, 500);
glutCreateWindow("OpenGL Test");
glutDisplayFunc(RenderScene);
glClearColor(0.3f, 0.3f, 0.3f, 0.0f);
glutMainLoop();
return 0;
}
编译这很好,但如果我运行它,我会收到分段错误错误。现在,如果我注释掉std::string z = "abc";
行,那么它运行正常,没有任何错误。
因此,出于某种原因,声明字符串变量会导致分段错误,但不会导致任何其他变量类型。
如果我删除所有OpenGL代码,那么它运行正常。但是如果我删除除了glutInit(&argc, argv);
之外的所有OpenGL代码,那么它仍会导致分段错误。
有关正在发生的事情的任何想法?
答案 0 :(得分:0)
我也有类似的问题,但我的是在Linux上。你在Linux或Windows上吗?你有安装任何显卡驱动程序吗?
对于我的情况,我正在安装Ubuntu
的{{1}}上运行,我注意到当我将程序与位于nVidia
的{{1}}关联时,会导致分段故障。然后我还发现另一个libGL.so
位于/usr/lib/x86_64-linux-gnu
,这将链接而不会崩溃。
希望得到这个帮助。