title: What libraries must I include to access GLUT/OpenGL (Mac without XCode)?
body: <p>The title gets at the heart of the issue, but the issue arose from this code I got from a tutorial at SpaceSimulator.net. I will post it for you here.</p>
  
  <pre><code>#include &lt;stdio.h&gt;
  #include &lt;stdlib.h&gt;
  #include &lt;GLUT/glut.h&gt;
  #include &lt;OpenGL/gl.h&gt;
  #include &lt;OpenGL/glu.h&gt;
  
  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 &gt; 359) rotation_x = 0;
     if (rotation_y &gt; 359) rotation_y = 0;
     if (rotation_z &gt; 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&lt;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(&amp;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();
  }
  </code></pre>
  
  <p>Okay, so this gives this error with g++:</p>
  
  <pre><code>    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 ...
  </code></pre>
  
  <p>Side question: what stage of compilation is this? It is past syntax errors, but not fully compiled.</p>
  
  <p>So I suspect that the libraries I am including are not correct, or that the Mac versions of the libraries are somehow different; although I doubt the latter because GLUT is supposed to be portable.</p>
  
  <p>What libraries do I have to include to get these GLUT/OpenGL functions? I know I have to include 'the GLUT/OpenGL ones'; I am hoping for something a bit more specific.</p>
  
  <p>Also, I really have a sore spot for moving away from C/C++ and to objective-C and XCode, so I hope that there is a solution that does not involve this switch.</p>