Xcode构建OpenGL程序失败:Undefined Symbols错误求助
问题
在Xcode中开发OpenGL光照模型程序时,构建始终因Undefined Symbols失败。期望程序弹出绿色背景、显示灰色茶壶等物体的窗口,以下是代码和具体错误信息:
#include <GLUT/glut.h> #include <stdlib.h> static GLfloat shift = 0.0; // 初始化平面方程的第四个参数 void init(void) { glClearColor (0.0, 0.5, 0.0, 0.0); glEnable (GL_LIGHTING); glEnable (GL_LIGHT0); glEnable (GL_DEPTH_TEST); } void display (void) { glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); GLdouble eqn0[4] = {1.0, 0.0, 0.0, shift}; // 第一个平面的参数数组 glClipPlane (GL_CLIP_PLANE0, eqn0); // 用eqn0数组创建第一个平面 // glEnable (GL_CLIP_PLANE0); // 激活第一个平面 /* 在不同位置绘制五个不同物体 */ glLineWidth(2.0); glPushMatrix(); glutSolidTeapot (2.0); glTranslatef (3.0, 3.0, 0.0); glutSolidTorus (0.4, 0.8, 20, 20); glTranslatef (-6.0, 0.0, 0.0); glutWireIcosahedron (); glTranslatef (0.0, -6.0, 0.0); glutSolidSphere (1.0, 20, 20); glTranslatef (6.0, 0.0, 0.0); glutWireCube (2.0); glPopMatrix(); glutSwapBuffers (); } void reshape(int w, int h) { glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_PROJECTION); glLoadIdentity (); gluPerspective (60.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0); glMatrixMode (GL_MODELVIEW); glLoadIdentity (); gluLookAt (0.0,0.0,10.0, 0.0,0.0,0.0, 0.0,1.0,0.0); } /* 实现键盘函数以增减"shift"值,交互式调整裁剪平面位置 */ void keyboard (unsigned char key, int x, int y) { switch (key) { case 'f': // shift = glutPostRedisplay (); break; case 27: exit(0); break; default: break; } } int main(int argc, char** argv) { glutInit (&argc, argv); glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize (800, 800); glutInitWindowPosition (100, 100); glutCreateWindow ("Planner clipping"); init (); glutDisplayFunc (display); glutReshapeFunc (reshape); glutKeyboardFunc (keyboard); glutMainLoop(); return 0; }
错误信息
显示最近问题 构建项目lightPA2的Debug配置目标lightPA2 架构x86_64的未定义符号: "_glClear", 引用自: display() in main.o "_glClearColor", 引用自: init() in main.o "_glClipPlane", 引用自: display() in main.o "_glEnable", 引用自: init() in main.o "_glLineWidth", 引用自: display() in main.o "_glLoadIdentity", 引用自: reshape(int, int) in main.o "_glMatrixMode", 引用自: reshape(int, int) in main.o "_glPopMatrix", 引用自: display() in main.o "_glPushMatrix", 引用自: display() in main.o "_glTranslatef", 引用自: display() in main.o "_glViewport", 引用自: reshape(int, int) in main.o "_gluLookAt", 引用自: reshape(int, int) in main.o "_gluPerspective", 引用自: reshape(int, int) in main.o ld: 架构x86_64的符号未找到 clang: 错误:链接命令失败,退出代码1(使用-v查看调用详情)
解决方法
这个错误是因为链接阶段未找到OpenGL相关库的符号,需要在Xcode项目中添加必要的系统框架:
- 打开Xcode项目,选中左侧导航栏最顶部的项目根节点
- 在右侧面板切换到Build Phases标签
- 展开Link Binary With Libraries区域,点击
+按钮 - 在搜索框中分别查找并添加以下框架:
OpenGL.frameworkGLUT.framework
- 重新构建项目即可
另外,可补充键盘交互的逻辑,实现裁剪平面的位置调整:
case 'f': shift += 0.1; // 按f键右移裁剪平面 glutPostRedisplay(); break; case 'b': shift -= 0.1; // 按b键左移裁剪平面 glutPostRedisplay(); break;
内容的提问来源于stack exchange,提问作者Lupe Covarrubias
相关产品推荐
相关产品推荐

