C++ – OpenGL C++ on Mac build fail ‘GL/glut.h’ file not found

cglutmacosopenglxcode

Attempting to run a sample OpenGL C++ program on OSX Yosemite with xCode.

When running the program I get 'GL/glut.h' file not found screenshot:

'GL/glut.h' file not found

However, I do have the glut.h header in the project:

glut.h header in the project

On a separate forum I read that it should be 'GLUT/glut.h' so I did, but got the following message:

GLUT/glut.h

What do I need to do to have OpenGL with C++ configured?

This is the code I am trying to run. If I can run this, then I should have everything ready to go:

#include <GLUT/glut.h>
#include <math.h>
//#include <stdlib.h>

const double TWO_PI = 6.2831853;

/*  Initial display-window size.  */
GLsizei winWidth = 400, winHeight = 400;
GLuint regHex;

class screenPt
{
private:
    GLint x, y;

public:
    /*  Default Constructor: initializes coordinate position to (0, 0).  */
    screenPt ( )  {
        x = y = 0;
    }

    void setCoords (GLint xCoord, GLint yCoord)  {
        x = xCoord;
        y = yCoord;
    }

    GLint getx ( ) const  {
        return x;
    }

    GLint gety ( ) const  {
        return y;
    }
};

static void init (void)
{
    screenPt hexVertex, circCtr;
    GLdouble theta;
    GLint k;

    /*  Set circle center coordinates.  */
    circCtr.setCoords (winWidth / 2, winHeight / 2);

    glClearColor (1.0, 1.0, 1.0, 0.0);   //  Display-window color = white.

    /*  Set up a display list for a red regular hexagon.
     *  Vertices for the hexagon are six equally spaced
     *  points around the circumference of a circle.
     */
    regHex = glGenLists (1);   //  Get an identifier for the display list.
    glNewList (regHex, GL_COMPILE);
    glColor3f (1.0, 0.0, 0.0);   //  Set fill color for hexagon to red.
    glBegin (GL_POLYGON);
    for (k = 0; k < 6; k++) {
        theta = TWO_PI * k / 6.0;
        hexVertex.setCoords (circCtr.getx ( ) + 150 * cos (theta),
                             circCtr.gety ( ) + 150 * sin (theta));
        glVertex2i (hexVertex.getx ( ), hexVertex.gety ( ));
    }
    glEnd ( );
    glEndList ( );
}

void regHexagon (void)
{
    glClear (GL_COLOR_BUFFER_BIT);

    glCallList (regHex);

    glFlush ( );
}

void winReshapeFcn (int newWidth, int newHeight)
{
    glMatrixMode (GL_PROJECTION);
    glLoadIdentity ( );
    gluOrtho2D (0.0, (GLdouble) newWidth, 0.0, (GLdouble) newHeight);

    glClear (GL_COLOR_BUFFER_BIT);
}

void main (int argc, char** argv)
{
    glutInit (&argc, argv);
    glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
    glutInitWindowPosition (100, 100);
    glutInitWindowSize (winWidth, winHeight);
    glutCreateWindow ("Reshape-Function & Display-List Example");

    init ( );
    glutDisplayFunc (regHexagon);
    glutReshapeFunc (winReshapeFcn);

    glutMainLoop ( );
}

Best Answer

When you changed it to 'GLUT/glut.h` it finds the header correctly. Unfortunately now you get all the warning messages about deprecated functions.

For a fix for the deprecated function messages see xcode 5 deprecation warning about glut functions or Glut deprecation in Mac OSX 10.9, IDE: QT Creator

You also have an error message saying that your main function needs to return an int. This is what will prevent your code from compiling, not the warnings.

Edit You should change your main function to have a return type of int.

int main(int argc, char *argv[])
{
  /* code */
  return 0;
}

Some compilers will accept void as a return type for main but this is a non-standard extension.