Opengl – undefined reference to gluOrtho2D

Résolution de l’erreur undefined reference to gluOrtho2D pour le développement Open gl .

 

Dans mon développement graphique en suivant un tutoriel sur OpenGL , je suis arrivé à être bloqué par une erreur. L’erreur en question est :

 

Opengl - undefined reference to gluOrtho2D

 

Si vous avez déjà rencontré ce genre d’erreur et n’avez pas encore trouver de solution, ce post est faite pour vous. Nous allons dans les sections suivantes vous montrer comment on a pu résoudre cet erreur de programmation open GL.

 

[bctt tweet=”Opengl – undefined reference to gluOrtho2D” username=”tedidevblog”]

Opengl – undefined reference to gluOrtho2D – dépannage

 

La résolution de cet erreur consiste à ajouter l’option  de compilation -lglu à la librairie d’opengl de votre projet. Nous utilisons l’IDE codeblock pour travailler donc en guise d’exemple d’application de la solution, on va montrer comment on a résolu le problème avec l’IDE.

Si vous utilisez comme moi l’IDE codeblock , il faudrait faire click droit sur le projet en cours, allez sur le chemin Build Options … > Linker Settings pour complèter la configuration en ajoutant dans les paramètres de linker. Voir l’image ci dessous :

 

opengl linker setting

 

Le problème venait du fait qu’ on a oublié d’intégrer une option Linker dans la configuration d’Open gl pour le projet en cours. 

Il peut arriver que vous n’arrivez pas du tout à exécuter un projet opengl malgré que vous l’avez installer dans votre ordinateur. La solution est d’ ajouter au projet , le chemin vers la librairie opengl. Sous linux, on a ajouté le chemin /usr/local/lib/libglut.so pour pouvoir compiler notre projet opengl. 

 

Si vous tout est bien configuré , essayez le code de la section suivante pour tester votre configuration.

Tester sa configuration opengl

 

Pour être sure que votre oonfiguration fonctionne comme on veut,  j’ai concocté un code spécial pour vous. En réalité c’est juste le code qui m’a coincé avec l’erreur undefined reference to gluOrtho2D . Copiez et collez le code source suivant , avant même d’essayer de le comprendre. Ce n’est pas non plus un moteur de jeux donc ne vous emballez pas.

 

 

#ifndef OPENGL_WINDOWS_H_INCLUDED
#define OPENGL_WINDOWS_H_INCLUDED




#endif // OPENGL_WINDOWS_H_INCLUDED

#include<GL/gl.h>
#include<GL/glu.h>

#include<X11/Xlib.h>
#include<GL/glx.h>

#include<GL/freeglut.h>

#include<stdlib.h>
#include<stdio.h>

#define drawOneLine(x1,y1,x2,y2) glBegin(GL_LINES) ; \
glVertex2f((x1),(y1)) ; glVertex2f((x2),(y2)) ; glEnd();


void init(void)
{

glClearColor(0.0,0.0,0.0,0.0);
glShadeModel(GL_FLAT);
}

void display(void)
{

int i;
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0,1.0,1.0);

// in 1rst row , 3 lines, each with a different stipple

glEnable(GL_LINE_STIPPLE);

glLineStipple(1,0x0101); // dotted
drawOneLine(50.0,125.0,150.0,125.0);
glLineStipple(1,0x00FF); // dashed
drawOneLine(150.0,125.0,250.0,125.0);
glLineStipple(1,0x1C47); // dash / dot / dash
drawOneLine(250.0,125.0,350.0,125.0);

// in 2nd row , 3 wide lines, each with a different stipple

glLineWidth(5.0);

glLineStipple(1,0x0101); // dotted
drawOneLine(50.0,100.0,150.0,100.0);
glLineStipple(1,0x00FF); // dashed
drawOneLine(150.0,100.0,250.0,100.0);
glLineStipple(1,0x1C47); // dash / dot / dash
drawOneLine(250.0,100.0,350.0,100.0);
glLineWidth(1.0);

// in 3rd row , 6 lines, with // dash / dot / dashstipple
// as part of a single connected line strip

glLineStipple(1,0x1C47); // dash / dot / dash
glBegin(GL_LINE_STRIP);
for(i = 0; i<7; i++)
glVertex2f(50.0+((GLfloat) i*50.0), 75.0);
glEnd();

// in 4th row, 6 independant lines with same stipple
for (i = 0; i<6 ; i++)
{
drawOneLine(50.0 + ((GLfloat) i * 50.0),50.0,
50.0 + ((GLfloat)(i+1) * 50.0), 50.0);
}


// in 5th row, 1 line with dash / dot .dash stipple
// and a stoipple repeat factor of 5
glLineStipple(5,0x1C47); // dash / dot / dash
drawOneLine(50.0,25.0,350.0,25.0);

glDisable(GL_LINE_STIPPLE);
glFlush();


}

void reshape(int w , int h)
{
glViewport(0,0,(GLsizei) w, (GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0,(GLdouble) w, 0.0, (GLdouble) h);
}

int run(int argc, char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(400,150);
glutInitWindowPosition(100,100);
glutCreateWindow(argv[0]);
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMainLoop();

return 0;

}


int main(int argc, char** argv){

return run(argc,argv);
}


 

 

C’est long je sais. Si le code ne génère aucune erreure, vous aurez réussit. Je n’afficherai pas le résultat pour ne pas vous spoiler.

 

 

Conclusion

 

Ce qu’il faut retenir de cette section, c’est que quand vous rencontrez l’erreur undefined reference to gluOrtho2D  c’est que votre projet n’arrive pas à trouver la librairie opengl pour comprendre votre code. Votre réflexe serait de vérifier si votre projet est proprement configuré pour trouver opengl et ses librairies. Concrètement sur code::block , il faut :

 

  • faire click droit sur le projet en court et allez sur le chemin Build Options … > Linker Settings

 

  • Ajouter le linker -lglu

 

Au cas où votre premier projet ne s’est jamais compilé bien que vous ayez installer OpenGL dans votre système, il faut :

  • Ajouter le chemin vers la librairie opengl que vous utilisez. ( sous linux c’est  usr/local/lib/libglut.so )

 

 

Opengl – undefined reference to gluOrtho2D