Какие библиотеки я должен включить для доступа к GLUT / OpenGL (Mac без XCode)?

Название попадает в суть проблемы, но проблема возникла из этого кода, который я получил из учебника на SpaceSimulator.net. Я отправлю его вам.

#include  #include  #include  #include  #include  typedef struct { float x,y,z; } vertex_type; typedef struct { int a,b,c; } polygon_type; #define MAX_POLYGONS 2000 polygon_type polygon[MAX_POLYGONS]; #define MAX_VERTICES 2000 vertex_type vertex[MAX_VERTICES]; typedef struct { vertex_type vertex[MAX_VERTICES]; polygon_type polygon[MAX_POLYGONS]; } obj_type,*obj_type_ptr; int screen_width, screen_height, filling; GLfloat rotation_x_increment, rotation_y_increment, rotation_z_increment; GLfloat rotation_x, rotation_y, rotation_z; obj_type cube = { { -10,-10, 10, //vertex v0 10,-10, 10, //vertex v1 10,-10,-10, //vertex v2 -10,-10,-10, //vertex v3 -10, 10, 10, //vertex v4 10, 10, 10, //vertex v5 10, 10,-10, //vertex v6 -10, 10,-10 //vertex v7 }, { 0, 1, 4, //polygon v0,v1,v4 1, 5, 4, //polygon v1,v5,v4 1, 2, 5, //polygon v1,v2,v5 2, 6, 5, //polygon v2,v6,v5 2, 3, 6, //polygon v2,v3,v6 3, 7, 6, //polygon v3,v7,v6 3, 0, 7, //polygon v3,v0,v7 0, 4, 7, //polygon v0,v4,v7 4, 5, 7, //polygon v4,v5,v7 5, 6, 7, //polygon v5,v6,v7 3, 2, 0, //polygon v3,v2,v0 2, 1, 0, //polygon v2,v1,v0 } }; void init(void) { glClearColor(0.0, 0.0, 0.2, 0.0); glShadeModel(GL_SMOOTH); glViewport(0,0,screen_width,screen_height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0f,(GLfloat)screen_width/(GLfloat)screen_height,1.0f,1000.0f); glEnable(GL_DEPTH_TEST); glPolygonMode (GL_FRONT_AND_BACK, GL_FILL); } void resize(int width, int height) { screen_width=width; screen_height=height; glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glViewport(0,0,screen_width,screen_height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0f,(GLfloat)screen_width/(GLfloat)screen_height,1.0f,1000.0f); glutPostRedisplay (); } void keyboard_s (int key, int x, int y) { switch (key) { case GLUT_KEY_UP: rotation_x_increment = rotation_x_increment +0.005; break; case GLUT_KEY_DOWN: rotation_x_increment = rotation_x_increment -0.005; break; case GLUT_KEY_LEFT: rotation_y_increment = rotation_y_increment +0.005; break; case GLUT_KEY_RIGHT: rotation_y_increment = rotation_y_increment -0.005; break; } } void keyboard (unsigned char key, int x, int y) { switch (key) { case ' ': rotation_x_increment=0; rotation_y_increment=0; rotation_z_increment=0; break; case 'r': case 'R': if (filling==0) { glPolygonMode (GL_FRONT_AND_BACK, GL_FILL); filling=1; } else { glPolygonMode (GL_FRONT_AND_BACK, GL_LINE); filling=0; } break; } } void display(void) { int l_index; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0.0,0.0,-50); rotation_x = rotation_x + rotation_x_increment; rotation_y = rotation_y + rotation_y_increment; rotation_z = rotation_z + rotation_z_increment; if (rotation_x > 359) rotation_x = 0; if (rotation_y > 359) rotation_y = 0; if (rotation_z > 359) rotation_z = 0; glRotatef(rotation_x,1.0,0.0,0.0); glRotatef(rotation_y,0.0,1.0,0.0); glRotatef(rotation_z,0.0,0.0,1.0); glBegin(GL_TRIANGLES); for (l_index=0;l_index<12;l_index++) { glColor3f(1.0,0.0,0.0); glVertex3f( cube.vertex[ cube.polygon[l_index].a ].x, cube.vertex[ cube.polygon[l_index].a ].y, cube.vertex[ cube.polygon[l_index].a ].z); glColor3f(0.0,1.0,0.0); glVertex3f( cube.vertex[ cube.polygon[l_index].b ].x, cube.vertex[ cube.polygon[l_index].b ].y, cube.vertex[ cube.polygon[l_index].b ].z); glColor3f(0.0,0.0,1.0); glVertex3f( cube.vertex[ cube.polygon[l_index].c ].x, cube.vertex[ cube.polygon[l_index].c ].y, cube.vertex[ cube.polygon[l_index].c ].z); } glEnd(); glFlush(); glutSwapBuffers(); } int main(int argc, char **argv){ glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(screen_width,screen_height); glutInitWindowPosition(0,0); glutCreateWindow("www.spacesimulator.net - 3d engine tutorials: Tutorial 2"); glutDisplayFunc(display); glutIdleFunc(display); glutReshapeFunc (resize); glutKeyboardFunc (keyboard); glutSpecialFunc (keyboard_s); init(); glutMainLoop(); } 

Хорошо, так что это дает эту ошибку с g ++:

  Undefined symbols for architecture x86_64: "_glClear", referenced from: display() in ccUTBKlR.o resize(int, int)in ccUTBKlR.o ... tons more of the same-style errors for every gl/glut function ... 

Боковой вопрос: какова эта стадия компиляции? Это прошлые синтаксические ошибки, но не полностью скомпилированные.

Поэтому я подозреваю, что библиотеки, которые я включаю, неверны или что версии библиотек Mac как-то разные; хотя я сомневаюсь в последнем, потому что GLUT предполагается переносить.

Какие библиотеки я должен включить, чтобы получить эти функции GLUT / OpenGL? Я знаю, что должен включать «GLUT / OpenGL»; Я надеюсь на что-то более конкретное.

Кроме того, у меня действительно есть больное место для перехода от C / C ++ и Object-C и XCode, поэтому я надеюсь, что есть решение, которое не связано с этим переключателем.

Добавьте OpenGL Framework в параметры компоновщика. GLUT не является частью OpenGL и должен устанавливаться отдельно. После установки вы также можете добавить GLUT Framework.

Я опаздываю, но я хочу сохранить некоторые усилия для людей, у которых есть та же проблема. Честно говоря, ответ Датенвольфа непонятен.

OpenGL и GLUT поставляются с установками ОС и Xcode. Пути по умолчанию были бы /System/Library/Frameworks/OpenGL.framework и /System/Library/Frameworks/GLUT.framework .

вы можете включить заголовок, который вам нужен напрямую, и скомпилировать свой код в командной строке со следующими параметрами компоновщика:

 gcc YOUR_CODE -framework OpenGL -framework GLUT 

Кстати, «GLUT» – «GL» в Windows. если вы хотите избежать проблемы с кросс-платформой, вы можете использовать следующий предпроцессорный оператор:

 #if defined(__APPLE__) && defined(__MACH__) # include  #else # include  #endif