The linker is complaining that a symbol (e.g. function) was specified in the program (e.g. in a header file), but the object (e.g. code) specifying it cannot be found when you link. This probably you are not linking a library you should be when you compile. You should post the output which contains a segment called: “Undefined reference to ________” so we know can help you find what library you didn’t include.
Ensure that when you ran ./configure, you ran the whole line from lazy foo
While downloading direct from a source and fixing code yourself is all well and good, I confused why Lazy Foo is trying to you have you install freeglut that way. I’d try homebrew or macports (freeglut is available on macports). With macports instead of doing all the
Wow! Thank you! MacPort made it SUPER EASY!!! I even found glew!
Is there something else I need to do? I followed Lazy foo’s instructions to set up in Xcode but, it can’t find free glut when i say: #include <OpenGL/freeglut.h>
Looking at it now and having done it a few minutes ago, you don’t really even need freeglut.
Create a new Xcode command line project like LazyFoo says. HOWEVER, no additional linker flags are needed. In “build phases” tab under the project add the GLUT and OpenGL frameworks. Copy/paste this into your main.cpp. I just merged all the LazyFoo code.
#include <GLUT/glut.h>
#include <OpenGL/OpenGL.h>
#include <cstdio> //if you are using straight C, this should be stdio.h
//Screen Constants
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
const int SCREEN_FPS = 60;
bool initGL()
{
//Initialize Projection Matrix
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
//Initialize Modelview Matrix
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
//Initialize clear color
glClearColor( 0.f, 0.f, 0.f, 1.f );
//Check for error
GLenum error = glGetError();
if( error != GL_NO_ERROR )
{
printf( "Error initializing OpenGL! %s
", gluErrorString( error ) );
return false;
}
return true;
}
void update()
{
}
void render()
{
//Clear color buffer
glClear( GL_COLOR_BUFFER_BIT );
//Render quad
glBegin( GL_QUADS );
glVertex2f( -0.5f, -0.5f );
glVertex2f( 0.5f, -0.5f );
glVertex2f( 0.5f, 0.5f );
glVertex2f( -0.5f, 0.5f );
glEnd();
//Update screen
glutSwapBuffers();
}
void runMainLoop( int val )
{
//Frame logic
update();
render();
//Run frame one more time
glutTimerFunc( 1000 / SCREEN_FPS, runMainLoop, val );
}
int main( int argc, char* args[] )
{
//Initialize FreeGLUT
glutInit( &argc, args );
//Create Double Buffered Window
glutInitDisplayMode( GLUT_DOUBLE );
glutInitWindowSize( SCREEN_WIDTH, SCREEN_HEIGHT );
glutCreateWindow( "OpenGL" );
//Do post window/context creation initialization
if( !initGL() )
{
printf( "Unable to initialize graphics library!
" );
return 1;
}
//Set rendering function
glutDisplayFunc( render );
//Set main loop
glutTimerFunc( 1000 / SCREEN_FPS, runMainLoop, 0 );
//Start GLUT main loop
glutMainLoop();
return 0;
}
I’m sure the LazyFoo guys are great and all, and I’m not trying to discourage you, but I’d just start a new iOS project in Xcode as an OpenGL game and learn shaders (modern OpenGL) and everything from the start. Xcode has a lot of good information in the documentation. If you open a terminal on a mac, you can also do things like
man glEnable
on command line to print the man(ual) pages for commands (like glEnable) if you like doing things old school.
Freeglut is just a “open source alternative to glut.” In the code I posted, you can see glut.h is the first thing I include.
Deprecation is a really fancy way of saying “you’re not supposed to use this anymore, come back one day and your favorite feature will probably be gone!”