linux下使用gcc编译Nate Robin的OpenGL教程

转自:

http://blog.csdn.net/qtyl1988/article/details/8495573      


按照OpenGL编程指南的建议,我决定一下Nate Robin的OpenGL教程,更确切地说,是编译运行该教程给出的transformation.c。虽然该教程已经给出了可以在windows下直接运行的exe文件,但是,请相信我,离开windows,在linux下用OpenGL会有不一样的感受。

      其实,我是来帮你消灭bug的。

      曾经以为,编译这个transformation.c是一件很简单的事情:gcc -lglut transformation.c。结果警告和错误一堆:

[plain]  view plain copy
  1. wy@wy-Vostro-260s:/media/d/wy/opengl/tutor/tutor$ gcc -lglut transformation.c   
  2. transformation.c: 在函数‘main’中:  
  3. transformation.c:710:5: 警告: 传递‘glutKeyboardFunc’的第 1 个参数时在不兼容的指针类型间转换 [默认启用]  
  4. /usr/include/GL/freeglut_std.h:467:26: 附注: 需要类型‘void (*)(unsigned char,  int,  int)’,但实参的类型为‘void (*)(char,  int,  int)’  
  5. transformation.c:715:5: 警告: 传递‘glutKeyboardFunc’的第 1 个参数时在不兼容的指针类型间转换 [默认启用]  
  6. /usr/include/GL/freeglut_std.h:467:26: 附注: 需要类型‘void (*)(unsigned char,  int,  int)’,但实参的类型为‘void (*)(char,  int,  int)’  
  7. transformation.c:723:5: 警告: 传递‘glutKeyboardFunc’的第 1 个参数时在不兼容的指针类型间转换 [默认启用]  
  8. /usr/include/GL/freeglut_std.h:467:26: 附注: 需要类型‘void (*)(unsigned char,  int,  int)’,但实参的类型为‘void (*)(char,  int,  int)’  
  9. transformation.c:741:5: 警告: 传递‘glutKeyboardFunc’的第 1 个参数时在不兼容的指针类型间转换 [默认启用]  
  10. /usr/include/GL/freeglut_std.h:467:26: 附注: 需要类型‘void (*)(unsigned char,  int,  int)’,但实参的类型为‘void (*)(char,  int,  int)’  
  11. /tmp/cc7rpOXR.o: In function `setfont':  
  12. transformation.c:(.text+0xb): undefined reference to `glutBitmapHelvetica10'  
  13. transformation.c:(.text+0x43): undefined reference to `glutBitmapHelvetica12'  
  14. transformation.c:(.text+0x5c): undefined reference to `glutBitmapHelvetica18'  
  15. transformation.c:(.text+0x93): undefined reference to `glutBitmapTimesRoman10'  
  16. transformation.c:(.text+0xa3): undefined reference to `glutBitmapTimesRoman24'  
  17. transformation.c:(.text+0xd7): undefined reference to `glutBitmap8By13'  
  18. transformation.c:(.text+0x10b): undefined reference to `glutBitmap9By15'  
  19. /tmp/cc7rpOXR.o: In function `drawstr':  
  20. transformation.c:(.text+0x16b): undefined reference to `glRasterPos2i'  
  21. transformation.c:(.text+0x196): undefined reference to `glutBitmapCharacter'  
  22. /tmp/cc7rpOXR.o: In function `cell_draw':  
  23. transformation.c:(.text+0x1df): undefined reference to `glColor3ub'  
  24. transformation.c:(.text+0x209): undefined reference to `glColor3ub'  
  25. transformation.c:(.text+0x243): undefined reference to `glColor3ub'  
  26. /tmp/cc7rpOXR.o: In function `drawmodel':  
  27. transformation.c:(.text+0x37e): undefined reference to `glmReadOBJ'  
  28. transformation.c:(.text+0x3a5): undefined reference to `glmUnitize'  
  29. transformation.c:(.text+0x3b4): undefined reference to `glmFacetNormals'  
  30. transformation.c:(.text+0x3ca): undefined reference to `glmVertexNormals'  
  31. transformation.c:(.text+0x3df): undefined reference to `glmDraw'  
  32. /tmp/cc7rpOXR.o: In function `drawaxes':  
  33. transformation.c:(.text+0x403): undefined reference to `glColor3ub'  
  34. transformation.c:(.text+0x40f): undefined reference to `glBegin'  
  35. transformation.c:(.text+0x42e): undefined reference to `glVertex3f'  
  36. transformation.c:(.text+0x44d): undefined reference to `glVertex3f'  
  37. transformation.c:(.text+0x46c): undefined reference to `glVertex3f'  
  38. transformation.c:(.text+0x48b): undefined reference to `glVertex3f'  
  39. transformation.c:(.text+0x4aa): undefined reference to `glVertex3f'  
  40. /tmp/cc7rpOXR.o:transformation.c:(.text+0x4c9): more undefined references to `glVertex3f' follow  
  41. /tmp/cc7rpOXR.o: In function `drawaxes':  
  42. transformation.c:(.text+0x50c): undefined reference to `glEnd'  
  43. transformation.c:(.text+0x518): undefined reference to `glBegin'  
  44. transformation.c:(.text+0x537): undefined reference to `glVertex3f'  
  45. transformation.c:(.text+0x556): undefined reference to `glVertex3f'  
  46. transformation.c:(.text+0x575): undefined reference to `glVertex3f'  
  47. transformation.c:(.text+0x594): undefined reference to `glVertex3f'  
  48. transformation.c:(.text+0x5b3): undefined reference to `glVertex3f'  
  49. /tmp/cc7rpOXR.o:transformation.c:(.text+0x5d2): more undefined references to `glVertex3f' follow  
  50. /tmp/cc7rpOXR.o: In function `drawaxes':  
  51. transformation.c:(.text+0x615): undefined reference to `glEnd'  
  52. transformation.c:(.text+0x621): undefined reference to `glBegin'  
  53. transformation.c:(.text+0x640): undefined reference to `glVertex3f'  
  54. transformation.c:(.text+0x65f): undefined reference to `glVertex3f'  
  55. transformation.c:(.text+0x67e): undefined reference to `glVertex3f'  
  56. transformation.c:(.text+0x69d): undefined reference to `glVertex3f'  
  57. transformation.c:(.text+0x6bc): undefined reference to `glVertex3f'  
  58. /tmp/cc7rpOXR.o:transformation.c:(.text+0x6db): more undefined references to `glVertex3f' follow  
  59. /tmp/cc7rpOXR.o: In function `drawaxes':  
  60. transformation.c:(.text+0x71e): undefined reference to `glEnd'  
  61. transformation.c:(.text+0x73a): undefined reference to `glColor3ub'  
  62. transformation.c:(.text+0x759): undefined reference to `glRasterPos3f'  
  63. transformation.c:(.text+0x768): undefined reference to `glutBitmapHelvetica12'  
  64. transformation.c:(.text+0x76d): undefined reference to `glutBitmapCharacter'  
  65. transformation.c:(.text+0x78c): undefined reference to `glRasterPos3f'  
  66. transformation.c:(.text+0x79b): undefined reference to `glutBitmapHelvetica12'  
  67. transformation.c:(.text+0x7a0): undefined reference to `glutBitmapCharacter'  
  68. transformation.c:(.text+0x7bf): undefined reference to `glRasterPos3f'  
  69. transformation.c:(.text+0x7ce): undefined reference to `glutBitmapHelvetica12'  
  70. transformation.c:(.text+0x7d3): undefined reference to `glutBitmapCharacter'  
  71. /tmp/cc7rpOXR.o: In function `normalize':  
  72. transformation.c:(.text+0xbb2): undefined reference to `sqrt'  
  73. /tmp/cc7rpOXR.o: In function `main_reshape':  
  74. transformation.c:(.text+0xc1f): undefined reference to `glViewport'  
  75. transformation.c:(.text+0xc2b): undefined reference to `glMatrixMode'  
  76. transformation.c:(.text+0xc30): undefined reference to `glLoadIdentity'  
  77. transformation.c:(.text+0xc50): undefined reference to `gluOrtho2D'  
  78. transformation.c:(.text+0xc5c): undefined reference to `glMatrixMode'  
  79. transformation.c:(.text+0xc61): undefined reference to `glLoadIdentity'  
  80. transformation.c:(.text+0xccb): undefined reference to `glutSetWindow'  
  81. transformation.c:(.text+0xcdf): undefined reference to `glutPositionWindow'  
  82. transformation.c:(.text+0xcf7): undefined reference to `glutReshapeWindow'  
  83. transformation.c:(.text+0xd04): undefined reference to `glutSetWindow'  
  84. transformation.c:(.text+0xd1c): undefined reference to `glutPositionWindow'  
  85. transformation.c:(.text+0xd34): undefined reference to `glutReshapeWindow'  
  86. transformation.c:(.text+0xd41): undefined reference to `glutSetWindow'  
  87. transformation.c:(.text+0xd59): undefined reference to `glutPositionWindow'  
  88. transformation.c:(.text+0xd7c): undefined reference to `glutReshapeWindow'  
  89. /tmp/cc7rpOXR.o: In function `main_display':  
  90. transformation.c:(.text+0xdac): undefined reference to `glClearColor'  
  91. transformation.c:(.text+0xdb8): undefined reference to `glClear'  
  92. transformation.c:(.text+0xdd4): undefined reference to `glColor3ub'  
  93. transformation.c:(.text+0xe49): undefined reference to `glutSwapBuffers'  
  94. /tmp/cc7rpOXR.o: In function `world_reshape':  
  95. transformation.c:(.text+0xf23): undefined reference to `glViewport'  
  96. transformation.c:(.text+0xf2f): undefined reference to `glMatrixMode'  
  97. transformation.c:(.text+0xf34): undefined reference to `glLoadIdentity'  
  98. transformation.c:(.text+0xf62): undefined reference to `gluPerspective'  
  99. transformation.c:(.text+0xf6e): undefined reference to `glMatrixMode'  
  100. transformation.c:(.text+0xf73): undefined reference to `glLoadIdentity'  
  101. transformation.c:(.text+0xf92): undefined reference to `glTranslatef'  
  102. transformation.c:(.text+0xfba): undefined reference to `glRotatef'  
  103. transformation.c:(.text+0xfe2): undefined reference to `glClearColor'  
  104. transformation.c:(.text+0xfee): undefined reference to `glEnable'  
  105. transformation.c:(.text+0xffa): undefined reference to `glEnable'  
  106. /tmp/cc7rpOXR.o: In function `world_display':  
  107. transformation.c:(.text+0x1083): undefined reference to `glClear'  
  108. transformation.c:(.text+0x109a): undefined reference to `glEnable'  
  109. transformation.c:(.text+0x109f): undefined reference to `glPushMatrix'  
  110. transformation.c:(.text+0x10ab): undefined reference to `glMultMatrixd'  
  111. transformation.c:(.text+0x10c6): undefined reference to `glLightfv'  
  112. transformation.c:(.text+0x10cb): undefined reference to `glPopMatrix'  
  113. transformation.c:(.text+0x10dc): undefined reference to `glDisable'  
  114. transformation.c:(.text+0x10e1): undefined reference to `glPushMatrix'  
  115. transformation.c:(.text+0x10ed): undefined reference to `glMultMatrixd'  
  116. transformation.c:(.text+0x1108): undefined reference to `glLightfv'  
  117. transformation.c:(.text+0x110d): undefined reference to `glPushMatrix'  
  118. transformation.c:(.text+0x1129): undefined reference to `glColor3ub'  
  119. transformation.c:(.text+0x1135): undefined reference to `glBegin'  
  120. transformation.c:(.text+0x1154): undefined reference to `glVertex3f'  
  121. transformation.c:(.text+0x1179): undefined reference to `glVertex3f'  
  122. transformation.c:(.text+0x11a4): undefined reference to `glVertex3f'  
  123. transformation.c:(.text+0x11cf): undefined reference to `glVertex3f'  
  124. transformation.c:(.text+0x11f4): undefined reference to `glVertex3f'  
  125. /tmp/cc7rpOXR.o:transformation.c:(.text+0x121f): more undefined references to `glVertex3f' follow  
  126. /tmp/cc7rpOXR.o: In function `world_display':  
  127. transformation.c:(.text+0x1274): undefined reference to `glEnd'  
  128. transformation.c:(.text+0x1290): undefined reference to `glColor3ub'  
  129. transformation.c:(.text+0x12bb): undefined reference to `glRasterPos3f'  
  130. transformation.c:(.text+0x12ca): undefined reference to `glutBitmapHelvetica12'  
  131. transformation.c:(.text+0x12cf): undefined reference to `glutBitmapCharacter'  
  132. transformation.c:(.text+0x12eb): undefined reference to `glColor3ub'  
  133. transformation.c:(.text+0x130a): undefined reference to `glScalef'  
  134. transformation.c:(.text+0x1314): undefined reference to `glPopMatrix'  
  135. transformation.c:(.text+0x1334): undefined reference to `glMultMatrixd'  
  136. transformation.c:(.text+0x1353): undefined reference to `glColor3f'  
  137. transformation.c:(.text+0x135f): undefined reference to `glBegin'  
  138. transformation.c:(.text+0x137b): undefined reference to `glVertex3i'  
  139. transformation.c:(.text+0x1397): undefined reference to `glVertex3i'  
  140. transformation.c:(.text+0x13b3): undefined reference to `glVertex3i'  
  141. transformation.c:(.text+0x13cf): undefined reference to `glVertex3i'  
  142. transformation.c:(.text+0x13d4): undefined reference to `glEnd'  
  143. transformation.c:(.text+0x13f0): undefined reference to `glColor3ub'  
  144. transformation.c:(.text+0x13fc): undefined reference to `glBegin'  
  145. transformation.c:(.text+0x1418): undefined reference to `glVertex3i'  
  146. transformation.c:(.text+0x1434): undefined reference to `glVertex3i'  
  147. transformation.c:(.text+0x1450): undefined reference to `glVertex3i'  
  148. transformation.c:(.text+0x146c): undefined reference to `glVertex3i'  
  149. transformation.c:(.text+0x1488): undefined reference to `glVertex3i'  
  150. /tmp/cc7rpOXR.o:transformation.c:(.text+0x14a4): more undefined references to `glVertex3i' follow  
  151. /tmp/cc7rpOXR.o: In function `world_display':  
  152. transformation.c:(.text+0x14e1): undefined reference to `glEnd'  
  153. transformation.c:(.text+0x14ed): undefined reference to `glEnable'  
  154. transformation.c:(.text+0x1501): undefined reference to `glBlendFunc'  
  155. transformation.c:(.text+0x1529): undefined reference to `glColor4f'  
  156. transformation.c:(.text+0x1535): undefined reference to `glBegin'  
  157. transformation.c:(.text+0x1551): undefined reference to `glVertex3i'  
  158. transformation.c:(.text+0x156d): undefined reference to `glVertex3i'  
  159. transformation.c:(.text+0x1589): undefined reference to `glVertex3i'  
  160. transformation.c:(.text+0x15a5): undefined reference to `glVertex3i'  
  161. transformation.c:(.text+0x15aa): undefined reference to `glEnd'  
  162. transformation.c:(.text+0x15b6): undefined reference to `glDisable'  
  163. transformation.c:(.text+0x15bb): undefined reference to `glPopMatrix'  
  164. transformation.c:(.text+0x15c0): undefined reference to `glutSwapBuffers'  
  165. /tmp/cc7rpOXR.o: In function `screen_reshape':  
  166. transformation.c:(.text+0x1612): undefined reference to `glViewport'  
  167. transformation.c:(.text+0x161e): undefined reference to `glMatrixMode'  
  168. transformation.c:(.text+0x1623): undefined reference to `glLoadIdentity'  
  169. transformation.c:(.text+0x1651): undefined reference to `gluPerspective'  
  170. transformation.c:(.text+0x1665): undefined reference to `glGetDoublev'  
  171. transformation.c:(.text+0x1671): undefined reference to `glMatrixMode'  
  172. transformation.c:(.text+0x1676): undefined reference to `glLoadIdentity'  
  173. transformation.c:(.text+0x16e6): undefined reference to `gluLookAt'  
  174. transformation.c:(.text+0x171c): undefined reference to `glRotatef'  
  175. transformation.c:(.text+0x173d): undefined reference to `glTranslatef'  
  176. transformation.c:(.text+0x1760): undefined reference to `glTranslatef'  
  177. transformation.c:(.text+0x178b): undefined reference to `glRotatef'  
  178. transformation.c:(.text+0x17ac): undefined reference to `glScalef'  
  179. transformation.c:(.text+0x17c0): undefined reference to `glGetDoublev'  
  180. transformation.c:(.text+0x17e8): undefined reference to `glClearColor'  
  181. transformation.c:(.text+0x17f4): undefined reference to `glEnable'  
  182. transformation.c:(.text+0x1800): undefined reference to `glEnable'  
  183. transformation.c:(.text+0x180c): undefined reference to `glEnable'  
  184. /tmp/cc7rpOXR.o: In function `screen_display':  
  185. transformation.c:(.text+0x1824): undefined reference to `glClear'  
  186. transformation.c:(.text+0x182e): undefined reference to `glutSwapBuffers'  
  187. /tmp/cc7rpOXR.o: In function `screen_menu':  
  188. transformation.c:(.text+0x18a0): undefined reference to `glmReadOBJ'  
  189. transformation.c:(.text+0x18c7): undefined reference to `glmUnitize'  
  190. transformation.c:(.text+0x18d6): undefined reference to `glmFacetNormals'  
  191. transformation.c:(.text+0x18ec): undefined reference to `glmVertexNormals'  
  192. /tmp/cc7rpOXR.o: In function `command_reshape':  
  193. transformation.c:(.text+0x191b): undefined reference to `glViewport'  
  194. transformation.c:(.text+0x1927): undefined reference to `glMatrixMode'  
  195. transformation.c:(.text+0x192c): undefined reference to `glLoadIdentity'  
  196. transformation.c:(.text+0x194c): undefined reference to `gluOrtho2D'  
  197. transformation.c:(.text+0x1958): undefined reference to `glMatrixMode'  
  198. transformation.c:(.text+0x195d): undefined reference to `glLoadIdentity'  
  199. transformation.c:(.text+0x1985): undefined reference to `glClearColor'  
  200. /tmp/cc7rpOXR.o: In function `command_display':  
  201. transformation.c:(.text+0x1999): undefined reference to `glClear'  
  202. transformation.c:(.text+0x1a4e): undefined reference to `glColor3ub'  
  203. transformation.c:(.text+0x1cac): undefined reference to `glColor3ub'  
  204. transformation.c:(.text+0x1ccd): undefined reference to `glutSwapBuffers'  
  205. /tmp/cc7rpOXR.o: In function `redisplay_all':  
  206. transformation.c:(.text+0x1fbc): undefined reference to `glutSetWindow'  
  207. transformation.c:(.text+0x1fc1): undefined reference to `glutPostRedisplay'  
  208. transformation.c:(.text+0x1fce): undefined reference to `glutSetWindow'  
  209. transformation.c:(.text+0x1feb): undefined reference to `glutPostRedisplay'  
  210. transformation.c:(.text+0x1ff8): undefined reference to `glutSetWindow'  
  211. transformation.c:(.text+0x2015): undefined reference to `glutPostRedisplay'  
  212. /tmp/cc7rpOXR.o: In function `main':  
  213. transformation.c:(.text+0x202c): undefined reference to `glutInitDisplayMode'  
  214. transformation.c:(.text+0x2040): undefined reference to `glutInitWindowSize'  
  215. transformation.c:(.text+0x2054): undefined reference to `glutInitWindowPosition'  
  216. transformation.c:(.text+0x2066): undefined reference to `glutInit'  
  217. transformation.c:(.text+0x2072): undefined reference to `glutCreateWindow'  
  218. transformation.c:(.text+0x2083): undefined reference to `glutReshapeFunc'  
  219. transformation.c:(.text+0x208f): undefined reference to `glutDisplayFunc'  
  220. transformation.c:(.text+0x209c): undefined reference to `glutKeyboardFunc'  
  221. transformation.c:(.text+0x20c9): undefined reference to `glutCreateSubWindow'  
  222. transformation.c:(.text+0x20da): undefined reference to `glutReshapeFunc'  
  223. transformation.c:(.text+0x20e6): undefined reference to `glutDisplayFunc'  
  224. transformation.c:(.text+0x20f3): undefined reference to `glutKeyboardFunc'  
  225. transformation.c:(.text+0x20ff): undefined reference to `glutCreateMenu'  
  226. transformation.c:(.text+0x2113): undefined reference to `glutAddMenuEntry'  
  227. transformation.c:(.text+0x211f): undefined reference to `glutAttachMenu'  
  228. transformation.c:(.text+0x214c): undefined reference to `glutCreateSubWindow'  
  229. transformation.c:(.text+0x215d): undefined reference to `glutReshapeFunc'  
  230. transformation.c:(.text+0x2169): undefined reference to `glutDisplayFunc'  
  231. transformation.c:(.text+0x2176): undefined reference to `glutKeyboardFunc'  
  232. transformation.c:(.text+0x2182): undefined reference to `glutCreateMenu'  
  233. transformation.c:(.text+0x2196): undefined reference to `glutAddMenuEntry'  
  234. transformation.c:(.text+0x21aa): undefined reference to `glutAddMenuEntry'  
  235. transformation.c:(.text+0x21be): undefined reference to `glutAddMenuEntry'  
  236. transformation.c:(.text+0x21d2): undefined reference to `glutAddMenuEntry'  
  237. transformation.c:(.text+0x21e6): undefined reference to `glutAddMenuEntry'  
  238. /tmp/cc7rpOXR.o:transformation.c:(.text+0x21fa): more undefined references to `glutAddMenuEntry' follow  
  239. /tmp/cc7rpOXR.o: In function `main':  
  240. transformation.c:(.text+0x2242): undefined reference to `glutAttachMenu'  
  241. transformation.c:(.text+0x226f): undefined reference to `glutCreateSubWindow'  
  242. transformation.c:(.text+0x2280): undefined reference to `glutReshapeFunc'  
  243. transformation.c:(.text+0x228c): undefined reference to `glutDisplayFunc'  
  244. transformation.c:(.text+0x2298): undefined reference to `glutMotionFunc'  
  245. transformation.c:(.text+0x22a4): undefined reference to `glutMouseFunc'  
  246. transformation.c:(.text+0x22b1): undefined reference to `glutKeyboardFunc'  
  247. transformation.c:(.text+0x22bd): undefined reference to `glutCreateMenu'  
  248. transformation.c:(.text+0x22d1): undefined reference to `glutAddMenuEntry'  
  249. transformation.c:(.text+0x22e5): undefined reference to `glutAddMenuEntry'  
  250. transformation.c:(.text+0x22f9): undefined reference to `glutAddMenuEntry'  
  251. transformation.c:(.text+0x230d): undefined reference to `glutAddMenuEntry'  
  252. transformation.c:(.text+0x2321): undefined reference to `glutAddMenuEntry'  
  253. /tmp/cc7rpOXR.o:transformation.c:(.text+0x2335): more undefined references to `glutAddMenuEntry' follow  
  254. /tmp/cc7rpOXR.o: In function `main':  
  255. transformation.c:(.text+0x2341): undefined reference to `glutAttachMenu'  
  256. transformation.c:(.text+0x234b): undefined reference to `glutMainLoop'  
  257. /tmp/cc7rpOXR.o:(.data+0x1b0): undefined reference to `glutBitmapTimesRoman10'  
  258. collect2: ld 返回 1  

      警告暂且忽略,单看这些错误,前缀为glut或gl的函数统统找不到符号,应该是在链接阶段出了问题难道因为我忘记链接libGL和libGLU的原因?好,咱们再试试:gcc -lglut -lGL -lGLU transformation.c。结果我就不往这里贴了,我只想告诉你,错误的数量和上面一样一样的。

      遭受如此打击,是不是感觉不爱了?说时迟那时快,神武的gcc文档出现了!同学们,请打开gcc官方文档Using the GNU Compiler Collection的第154页,3.13节,Options for Linking!请你双目直视-l选项的解释,发现这样一段话:

“It makes a difference where in the command you write this option; the linker searches and processes libraries and object files in the order they are specified. Thus, ‘foo.o -lz bar.o’ searches library ‘z’ after file ‘foo.o’ but before ‘bar.o’. If ‘bar.o’ refers to functions in ‘z’, those functions may not be loaded.”

      这段话告诉我们,-l选项的位置是有讲究的:如果目标文件bar.o中引用了库z中的函数,那么这些函数是不会被加载的。但是,如果foo.o中引用了库z中的函数,那就没有问题。假设foo.o和bar.o都引用了库z中的函数func,链接过程应该是这样的:foo.o中遇到无法解析的函数符号func,因而向右查找链接库,发现选项lz,于是z中查找发现函数func,函数符号顺利解析;bar.o中同样遇到无法解析的函数符号func,向右查找链接库,未发现可用链接库,函数符号解析失败。

      根据上述理论,编译链接transformation.c的命令行貌似应该这样写:gcc transformation.c -lglut -lGL -lGLU。于是得到下面的结果:

[plain]  view plain copy
  1. transformation.c: 在函数‘main’中:  
  2. transformation.c:710:5: 警告: 传递‘glutKeyboardFunc’的第 1 个参数时在不兼容的指针类型间转换 [默认启用]  
  3. /usr/include/GL/freeglut_std.h:467:26: 附注: 需要类型‘void (*)(unsigned char,  int,  int)’,但实参的类型为‘void (*)(char,  int,  int)’  
  4. transformation.c:715:5: 警告: 传递‘glutKeyboardFunc’的第 1 个参数时在不兼容的指针类型间转换 [默认启用]  
  5. /usr/include/GL/freeglut_std.h:467:26: 附注: 需要类型‘void (*)(unsigned char,  int,  int)’,但实参的类型为‘void (*)(char,  int,  int)’  
  6. transformation.c:723:5: 警告: 传递‘glutKeyboardFunc’的第 1 个参数时在不兼容的指针类型间转换 [默认启用]  
  7. /usr/include/GL/freeglut_std.h:467:26: 附注: 需要类型‘void (*)(unsigned char,  int,  int)’,但实参的类型为‘void (*)(char,  int,  int)’  
  8. transformation.c:741:5: 警告: 传递‘glutKeyboardFunc’的第 1 个参数时在不兼容的指针类型间转换 [默认启用]  
  9. /usr/include/GL/freeglut_std.h:467:26: 附注: 需要类型‘void (*)(unsigned char,  int,  int)’,但实参的类型为‘void (*)(char,  int,  int)’  
  10. /tmp/ccZaUWwu.o: In function `drawmodel':  
  11. transformation.c:(.text+0x37e): undefined reference to `glmReadOBJ'  
  12. transformation.c:(.text+0x3a5): undefined reference to `glmUnitize'  
  13. transformation.c:(.text+0x3b4): undefined reference to `glmFacetNormals'  
  14. transformation.c:(.text+0x3ca): undefined reference to `glmVertexNormals'  
  15. transformation.c:(.text+0x3df): undefined reference to `glmDraw'  
  16. /tmp/ccZaUWwu.o: In function `screen_menu':  
  17. transformation.c:(.text+0x18a0): undefined reference to `glmReadOBJ'  
  18. transformation.c:(.text+0x18c7): undefined reference to `glmUnitize'  
  19. transformation.c:(.text+0x18d6): undefined reference to `glmFacetNormals'  
  20. transformation.c:(.text+0x18ec): undefined reference to `glmVertexNormals'  
  21. collect2: ld 返回 1  

      虽然 还有错误 ,但是毕竟少了很多,令人兴奋 !再看看这些错误,还是无法解析函数符号的问题,这时候就跟libGL、libGLU和libglut没有啥关系了,因为出错的函数前缀都是glm。事实上,将Nate Robin教程解压后,transformation.c所在的目录下有很多文件,包括glm.c和glm.h。我不太清楚这两个文件是干嘛的,但是vim打开查看,貌似与数字字体有关。查看transformation.c文件,发现包含的头文件中有glm.h一项,所以,我们应该将glm.c与transformation.c一同编译,就像这样:gcc transformation.c glm.c -lglut -lGLU -lGL。结果呢,就成了!其实,不加选项-lGL也能成功,不信你试试!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值