Wednesday 16 March 2016

c++ - Error with GLUT compile in ubuntu




I try to compile some "hello world" glut application:



#include 


#include

#include

#include

GLint Width = 512, Height = 512;

const int CubeSize = 200;


void Display(void)
{
int left, right, top, bottom;

left = (Width - CubeSize) / 2;
right = left + CubeSize;
bottom = (Height - CubeSize) / 2;
top = bottom + CubeSize;

glClearColor(0, 0, 0, 1);

glClear(GL_COLOR_BUFFER_BIT);

glColor3ub(255,0,0);
glBegin(GL_QUADS);
glVertex2f(left,bottom);
glVertex2f(left,top);
glVertex2f(right,top);
glVertex2f(right,bottom);
glEnd();


glFinish();
}

void Reshape(GLint w, GLint h)
{
Width = w;
Height = h;
glViewport(0, 0, w, h);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();
glOrtho(0, w, 0, h, -1.0, 1.0);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}

void Keyboard(unsigned char key, int x, int y)
{
#define ESCAPE '\033'


if( key == ESCAPE )
exit(0);
}

main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB);
glutInitWindowSize(Width, Height);

glutCreateWindow("Red square example");

glutDisplayFunc(Display);
glutReshapeFunc(Reshape);
glutKeyboardFunc(Keyboard);

glutMainLoop();
}



The compile command is:



gcc -lGL -lGLU hw_opengl.cpp -o hw_opengl


I've got the following errors:



/tmp/ccbnBFHC.o: In function `Display()':
hw_opengl.cpp:(.text+0x6c): undefined reference to `glClearColor'
hw_opengl.cpp:(.text+0x78): undefined reference to `glClear'

hw_opengl.cpp:(.text+0x94): undefined reference to `glColor3ub'
hw_opengl.cpp:(.text+0xa0): undefined reference to `glBegin'
hw_opengl.cpp:(.text+0xb4): undefined reference to `glVertex2f'
hw_opengl.cpp:(.text+0xc8): undefined reference to `glVertex2f'
hw_opengl.cpp:(.text+0xdc): undefined reference to `glVertex2f'
hw_opengl.cpp:(.text+0xf0): undefined reference to `glVertex2f'
hw_opengl.cpp:(.text+0xf5): undefined reference to `glEnd'
hw_opengl.cpp:(.text+0xfa): undefined reference to `glFinish'
/tmp/ccbnBFHC.o: In function `Reshape(int, int)':
hw_opengl.cpp:(.text+0x134): undefined reference to `glViewport'

hw_opengl.cpp:(.text+0x140): undefined reference to `glMatrixMode'
hw_opengl.cpp:(.text+0x145): undefined reference to `glLoadIdentity'
hw_opengl.cpp:(.text+0x173): undefined reference to `glOrtho'
hw_opengl.cpp:(.text+0x17f): undefined reference to `glMatrixMode'
hw_opengl.cpp:(.text+0x184): undefined reference to `glLoadIdentity'
/tmp/ccbnBFHC.o: In function `main':
hw_opengl.cpp:(.text+0x1c1): undefined reference to `glutInit'
hw_opengl.cpp:(.text+0x1cd): undefined reference to `glutInitDisplayMode'
hw_opengl.cpp:(.text+0x1e4): undefined reference to `glutInitWindowSize'
hw_opengl.cpp:(.text+0x1f0): undefined reference to `glutCreateWindow'

hw_opengl.cpp:(.text+0x1fc): undefined reference to `glutDisplayFunc'
hw_opengl.cpp:(.text+0x208): undefined reference to `glutReshapeFunc'
hw_opengl.cpp:(.text+0x214): undefined reference to `glutKeyboardFunc'
hw_opengl.cpp:(.text+0x219): undefined reference to `glutMainLoop'
collect2: ld returned 1 exit status


I've install GLUT:
sudo apt-get install freeglut3 freeglut3-dev




There are in /usr/lib:
libglut.a
libglut.so
libglut.so.3
libglut.so.3.9.0



locate glu.h
/home/goran/QtSDK/QtSources/4.8.0/src/3rdparty/webkit/Source/ThirdParty/glu/internal_glu.h
/usr/include/GL/glu.h

/usr/include/GL/gl.h

locate gl.h

...
/usr/include/GL/gl.h


What do I do incorrectly?


Answer



The GCC linker may scan libraries in the order they are on the command line, which means for you it may scan the libraries first and sees no one using them, and therefore you get the errors. To be sure, place the libraries last on the command line:



gcc hw_opengl.cpp -o hw_opengl -lGL -lGLU -lglut


No comments:

Post a Comment

c++ - Does curly brackets matter for empty constructor?

Those brackets declare an empty, inline constructor. In that case, with them, the constructor does exist, it merely does nothing more than t...