Bonjour.


Comme dit dans le titre, j'ai un problème au moment du linkage avec glew.
Voici mon code ainsi que les erreurs.

Fichier : gldisplay.h
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#ifndef GLDISPLAY_H
#define GLDISPLAY_H
 
/* includes Glew */
#ifdef WIN32
#include <GL/glew.h>
#else
#define GL3_PROTOTYPES 1
#include <GL3/gl3.h>
#endif
 
/* includes OpenGL */
#include <GL/gl.h>
 
/* includes Qt - OpenGL */
#include <QGLFormat>
#include <QGLContext>
#include <QGLWidget>
 
class GLDisplay : public QGLWidget
{
    Q_OBJECT
 
    public:
        GLDisplay(QWidget *parent = 0);
 
    protected:
        void initializeGL();
        void resizeGL(int w, int h);
        void paintGL();
 
    signals:
 
    public slots:
 
};
 
#endif // GLDISPLAY_H

Fichier : gldisplay.cpp
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include "gldisplay.h"
 
#include <iostream>
 
GLDisplay::GLDisplay(QWidget *parent)
{
    QGLFormat *formatGL = new QGLFormat;
    formatGL->setVersion(3, 1); // Version : 3.1
    formatGL->setDoubleBuffer(true);
    formatGL->setDepthBufferSize(24);
    formatGL->setSwapInterval(1);
 
    QGLContext *contextGL = new QGLContext(*formatGL);
    contextGL->create(contextGL);
 
    QGLWidget(contextGL, parent);
}
 
 
void GLDisplay::initializeGL()
{
    #ifdef WIN32
    GLenum initialisationGLEW = glewInit();
 
    if(initialisationGLEW != GLEW_OK)
    {
        std::cerr << "Erreur d'initialisation de GLEW : " << glewGetErrorString(initialisationGLEW) << std::endl;
        Q_ASSERT(initialisationGLEW != GLEW_OK);
    }
    #endif
 
}
 
void GLDisplay::resizeGL(int w, int h)
{
 
}
 
void GLDisplay::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT);
    float vertices[] = {-0.5, -0.5,   0.0, 0.5,   0.5, -0.5}; // Ecriture des coordonnés dans un tableau
    glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, vertices); // Envoie des coordonnés dans un tableau
    glEnableVertexAttribArray(0); // Activation du tableau "0" (coordonnés)
    glDrawArrays(GL_TRIANGLES, 0, 3); // Affichage du triangle
    glDisableVertexAttribArray(0); // Désactivation du tableau "0"
}

Fichier : 4DViewer.pro
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SOURCES += \
    main.cpp \
    4DViewer.cpp \
    MainWindow.cpp \
    gldisplay.cpp
 
HEADERS += \
    4DViewer.h \
    MainWindow.h \
    gldisplay.h \
    constants.h
 
FORMS +=
 
QT += opengl
 
LIBS += C:/QtSDK/mingw/lib/glew32.lib
INCLUDEPATH = QMAKE_INCDIR_OPENGL

Erreurs :
  • undefined reference to `_imp____glewVertexAttribPointer'
  • undefined reference to `_imp____glewEnableVertexAttribArray'
  • undefined reference to `_imp____glewDisableVertexAttribArray'

Les lignes provoquant ces erreurs sont les ligne 43, 44 et 46 du fichier "gldisplay.cpp"


Informations supplémentaires :
Je compile sous windows 7 64 bit savec Qt Creator (2.4.1) basé sur Qt 4.7.4 (32 bits) et la dernière version de glew (1.9.0 en 32 bit)


J'ai cherché des heures durant sur internet pour savoir qu'est-ce qui cloche mais rien à faire je trouve pas

Merci de me venir en aide (pitié )


Edit : J'ai ENFIN trouvé d'où venait l'erreur .
Elle ne viens pas du code mais du .lib que j'utilisais. En effet j'ai téléchargé glew ici cependant elle n'est pas compilée pour mingw (que j'utilise via Qt Creator). J'ai donc dû la recompiler et ça marche nikel
J'avais aussi oublié de lier quelques lib...

Voici mon nouveau .pro
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SOURCES += \
    main.cpp \
    4DViewer.cpp \
    MainWindow.cpp \
    gldisplay.cpp
 
HEADERS += \
    4DViewer.h \
    MainWindow.h \
    gldisplay.h \
    constants.h
 
FORMS +=
 
QT += opengl
 
LIBS += C:/QtSDK/mingw/lib/libglew.a
LIBS += C:/QtSDK/mingw/lib/libopengl32.a
LIBS += C:/QtSDK/mingw/lib/libglu32.a
 
INCLUDEPATH = QMAKE_INCDIR_OPENGL
PS : il faut aussi faire un #define GLEW_STATIC avant l'inclure glew.h si on lie la bibliothèque de manière statique.

PPS : Désolé du post mais j'avais vraiment cherché longtemps avant de l'écrire. J'espère tout de même qu'il pourra servir à des personnes rencontrant le même problème que moi.