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
PS : il faut aussi faire un #define GLEW_STATIC avant l'inclure glew.h si on lie la bibliothèque de manière statique.
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
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.
Partager