我正在执行CUDA API虚拟化项目。该项目基于QEMU hyper-visor。我正在使用最新版本2.6.0rc3。我已经完成了核心模块,这个问题是关于演示它。QEMU 2.6.0rc3有OpenGL支持。OpenGL glutInit():XOpenDisplay()导致分段错误
我在VM上运行以下程序,测试OpenGL支持&它没有任何问题执行。
#include <GL/freeglut.h>
#include <GL/gl.h>
void renderFunction()
{
glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
glBegin(GL_POLYGON);
glVertex2f(-0.5, -0.5);
glVertex2f(-0.5, 0.5);
glVertex2f(0.5, 0.5);
glVertex2f(0.5, -0.5);
glEnd();
glFlush();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE);
glutInitWindowSize(500,500);
glutInitWindowPosition(100,100);
glutCreateWindow("OpenGL - First window demo");
glutDisplayFunc(renderFunction);
glewInit();
glutMainLoop();
return 0;
}
我还使用了NVIDIA显卡的样品名为Demo “simpleGL” 可与https://developer.nvidia.com/cuda-toolkit-65 CUDA 6.5工具包。该演示使用OpenGL来描述波形和CUDA以进行底层计算以模拟它。当我运行这个演示程序时,会在glutInit()调用中发生分段错误。以下是演示中的相关代码段。
bool initGL(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE);
glutInitWindowSize(window_width, window_height);
glutCreateWindow("Cuda GL Interop (VBO)");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMotionFunc(motion);
glutTimerFunc(REFRESH_DELAY, timerEvent,0);
// initialize necessary OpenGL extensions
glewInit();
if (! glewIsSupported("GL_VERSION_2_0 "))
{
fprintf(stderr, "ERROR: Support for necessary OpenGL extensions missing.");
fflush(stderr);
return false;
}
// default initialization
glClearColor(0.0, 0.0, 0.0, 1.0);
glDisable(GL_DEPTH_TEST);
// viewport
glViewport(0, 0, window_width, window_height);
// projection
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0, (GLfloat)window_width/(GLfloat) window_height, 0.1, 10.0);
SDK_CHECK_ERROR_GL();
return true;
}
这里是gdb调用堆栈。
#0 0x00007ffff57d2872 in XOpenDisplay()
from /usr/lib/x86_64-linux-gnu/libX11.so.6
#1 0x00007ffff76af2a3 in glutInit()
from /usr/lib/x86_64-linux-gnu/libglut.so.3
#2 0x000000000040394d in initGL(int, char**)()
#3 0x0000000000403b6a in runTest(int, char**, char*)()
#4 0x00000000004037dc in main()
根据我的研究,当尝试打开一个窗口时发生了分段错误。我对OpenGL的内部工作知识非常有限,在这方面的一些帮助非常感谢。谢谢。
什么OpenGL库链接,特别是在CUDA示例? – talonmies
@talonmies与CUDA示例链接的库如下所示--IGL -lGLU -lX11 -lXi -lXmu -lglut -lGLEW和与工作示例链接的库是-lGL -lGLU -lglut -lGLEW –
我的意思是指哪些OpenGL实现。 NVIDIA图书馆或台面,或其他? – talonmies