web-dev-qa-db-fra.com

Erreur avec le compilateur GLUT dans Ubuntu

J'essaie de compiler une application glut "hello world":

#include <stdlib.h>

#include <GL/gl.h>

#include <GL/glu.h>

#include <GL/glut.h>

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();
}

La commande de compilation est:

gcc -lGL -lGLU hw_opengl.cpp -o hw_opengl

J'ai les erreurs suivantes:

/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

J'ai installé GLUT: Sudo apt-get installer freeglut3 freeglut3-dev

Il y a dans /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

Qu'est-ce que je fais mal?

17
G-71

L'éditeur de liens GCC peut analyser les bibliothèques dans l'ordre dans lequel elles se trouvent sur la ligne de commande, ce qui signifie pour vous qu'il peut analyser les bibliothèques en premier et que personne ne les utilise, ce qui entraîne des erreurs. Pour être sûr, placez les bibliothèques en dernier sur la ligne de commande: 

gcc hw_opengl.cpp -o hw_opengl -lGL -lGLU -lglut
42
g++ filename.cpp -lGL -lglut -o exfilename

et alors

./exfilename
5
Sudip Das

C'est parce que xlibmesa-gl-dev et xlibmesa-glu-dev ne créent pas de lien symbolique vers les fichiers libGL.so et libGLU.so, donc ld ne peut pas les trouver pour les lier avec votre code.

4
shadowglen

Il vous manque -lglut.

La commande de compilation correcte est gcc -lGL -lglut -lGLU hw_opengl.cpp -o hw_opengl

2
user719958
g++ -lglut -lGLU -lGL helloWorld.cpp -o helloWorld

g++, pas gcc, pour cpp

0
Julie

Vérifiez si vous avez installé binutils-gold (éditeur de liens Gold) ou non, installez-le et si vous l'avez déjà fait, supprimez-le et essayez au terminal,

g++ sourcefile.cpp -lglut
0
xIN3N