我正在執行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