Problème d'édition des liens avec glew
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:
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:
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:
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é :cry: )
Edit : J'ai ENFIN trouvé d'où venait l'erreur 8-) .
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 :ccool:
J'avais aussi oublié de lier quelques lib...
Voici mon nouveau .pro
Code:
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.