按照OpenGL编程指南的建议,我决定看一下Nate Robin的OpenGL教程,更确切地说,是编译运行该教程给出的transformation.c。虽然该教程已经给出了可以在windows下直接运行的exe文件,但是,请相信我,离开windows,在linux下用OpenGL会有不一样的感受。
其实,我是来帮你消灭bug的。
曾经以为,编译这个transformation.c是一件很简单的事情:gcc -lglut transformation.c。结果警告和错误一堆:
wy@wy-Vostro-260s:/media/d/wy/opengl/tutor/tutor$ gcc -lglut transformation.c
transformation.c: 在函数‘main’中:
transformation.c:710:5: 警告: 传递‘glutKeyboardFunc’的第 1 个参数时在不兼容的指针类型间转换 [默认启用]
/usr/include/GL/freeglut_std.h:467:26: 附注: 需要类型‘void (*)(unsigned char, int, int)’,但实参的类型为‘void (*)(char, int, int)’
transformation.c:715:5: 警告: 传递‘glutKeyboardFunc’的第 1 个参数时在不兼容的指针类型间转换 [默认启用]
/usr/include/GL/freeglut_std.h:467:26: 附注: 需要类型‘void (*)(unsigned char, int, int)’,但实参的类型为‘void (*)(char, int, int)’
transformation.c:723:5: 警告: 传递‘glutKeyboardFunc’的第 1 个参数时在不兼容的指针类型间转换 [默认启用]
/usr/include/GL/freeglut_std.h:467:26: 附注: 需要类型‘void (*)(unsigned char, int, int)’,但实参的类型为‘void (*)(char, int, int)’
transformation.c:741:5: 警告: 传递‘glutKeyboardFunc’的第 1 个参数时在不兼容的指针类型间转换 [默认启用]
/usr/include/GL/freeglut_std.h:467:26: 附注: 需要类型‘void (*)(unsigned char, int, int)’,但实参的类型为‘void (*)(char, int, int)’
/tmp/cc7rpOXR.o: In function `setfont':
transformation.c:(.text+0xb): undefined reference to `glutBitmapHelvetica10'
transformation.c:(.text+0x43): undefined reference to `glutBitmapHelvetica12'
transformation.c:(.text+0x5c): undefined reference to `glutBitmapHelvetica18'
transformation.c:(.text+0x93): undefined reference to `glutBitmapTimesRoman10'
transformation.c:(.text+0xa3): undefined reference to `glutBitmapTimesRoman24'
transformation.c:(.text+0xd7): undefined reference to `glutBitmap8By13'
transformation.c:(.text+0x10b): undefined reference to `glutBitmap9By15'
/tmp/cc7rpOXR.o: In function `drawstr':
transformation.c:(.text+0x16b): undefined reference to `glRasterPos2i'
transformation.c:(.text+0x196): undefined reference to `glutBitmapCharacter'
/tmp/cc7rpOXR.o: In function `cell_draw':
transformation.c:(.text+0x1df): undefined reference to `glColor3ub'
transformation.c:(.text+0x209): undefined reference to `glColor3ub'
transformation.c:(.text+0x243): undefined reference to `glColor3ub'
/tmp/cc7rpOXR.o: In function `drawmodel':
transformation.c:(.text+0x37e): undefined reference to `glmReadOBJ'
transformation.c:(.text+0x3a5): undefined reference to `glmUnitize'
transformation.c:(.text+0x3b4): undefined reference to `glmFacetNormals'
transformation.c:(.text+0x3ca): undefined reference to `glmVertexNormals'
transformation.c:(.text+0x3df): undefined reference to `glmDraw'
/tmp/cc7rpOXR.o: In function `drawaxes':
transformation.c:(.text+0x403): undefined reference to `glColor3ub'
transformation.c:(.text+0x40f): undefined reference to `glBegin'
transformation.c:(.text+0x42e): undefined reference to `glVertex3f'
transformation.c:(.text+0x44d): undefined reference to `glVertex3f'
transformation.c:(.text+0x46c): undefined reference to `glVertex3f'
transformation.c:(.text+0x48b): undefined reference to `glVertex3f'
transformation.c:(.text+0x4aa): undefined reference to `glVertex3f'
/tmp/cc7rpOXR.o:transformation.c:(.text+0x4c9): more undefined references to `glVertex3f' follow
/tmp/cc7rpOXR.o: In function `drawaxes':
transformation.c:(.text+0x50c): undefined reference to `glEnd'
transformation.c:(.text+0x518): undefined reference to `glBegin'
transformation.c:(.text+0x537): undefined reference to `glVertex3f'
transformation.c:(.text+0x556): undefined reference to `glVertex3f'
transformation.c:(.text+0x575): undefined reference to `glVertex3f'
transformation.c:(.text+0x594): undefined reference to `glVertex3f'
transformation.c:(.text+0x5b3): undefined reference to `glVertex3f'
/tmp/cc7rpOXR.o:transformation.c:(.text+0x5d2): more undefined references to `glVertex3f' follow
/tmp/cc7rpOXR.o: In function `drawaxes':
transformation.c:(.text+0x615): undefined reference to `glEnd'
transformation.c:(.text+0x621): undefined reference to `glBegin'
transformation.c:(.text+0x640): undefined reference to `glVertex3f'
transformation.c:(.text+0x65f): undefined reference to `gl