2013-07-18 43 views
1

我在Visual Studio 2012中編寫了一個小型QT應用程序(version 5.1.0(msvc2012_64_opengl),Add-in 1.2.2)。我開始使用GLU.h include並且程序完美工作。但我想從glew.h實現一些函數。在這種情況下要做的第一件事就是將'glewInit'方法稱爲'initializeGL'QT方法的頂部。但是,我有以下錯誤:如何用glew.h和QT使用glewInit函數?

error lnk2019 unresolved external symbol __glewInit 

但我注意到,代碼以及exectuted不glewInit但與#包括「glew.h」,而不是#包括「glu.h」。所以項目屬性中的鏈接是正確的(glu32.lib)。所以這個問題似乎來自QT和我自己包含的glew.h之間的交互(我想說我使用glew.h,因爲很多時候沒有任何問題,但沒有QT)。

這裏是我的C++頭文件:

#include <gl/glew.h> 
#define QT_NO_OPENGL_ES_2 
#include <QGLWidget> 
//#include <QtOpenGL\qgl.h> 
//#include <qtopengl.h> 

class HSGLWidget : public QGLWidget { 

    Q_OBJECT 
    public: 
     explicit HSGLWidget(QWidget *parent = 0); 
     virtual ~HSGLWidget(); 

    protected: 
     virtual void initializeGL(); 
     virtual void resizeGL(int width, int height); 
     virtual void paintGL(); 

     virtual void keyPressEvent(QKeyEvent *keyEvent); /// From QWidget 

    private: 
     void _onSetup(); 

    private: 
     QTimer *_timer; 
}; 

我的C++源文件:

#include "HSGLWidget.hpp" 
    #define QT_NO_OPENGL_ES_2 

    HSGLWidget::HSGLWidget(QWidget *parent) 
     : QGLWidget(parent) { 
     this->_onSetup(); 

    } 

HSGLWidget::~HSGLWidget() { 
} 

void HSGLWidget::initializeGL() { 
    glewInit(); 
    glShadeModel(GL_SMOOTH); 
    glClearColor(0.0f, 0.20f, 0.0f, 0.0f); 
    glClearDepth(1.0f); 
    glEnable(GL_DEPTH_TEST); 
    glDepthFunc(GL_LEQUAL); 
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); 
} 

void HSGLWidget::resizeGL(int width, int height) { 

    if (height == 0) 
     height = 1; 
    glViewport(0, 0, width, height); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluPerspective(45.0f, (GLfloat)width/(GLfloat)height, 0.1f, 100.0f); 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
} 

void HSGLWidget::paintGL() { 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glLoadIdentity(); 
    glTranslatef(-1.5f, 0.0f, -6.0f); 

    glBegin(GL_TRIANGLES); 
     glVertex3f(0.0f, 1.0f, 0.0f); 
     glVertex3f(-1.0f, -1.0f, 0.0f); 
     glVertex3f(1.0f, -1.0f, 0.0f); 
    glEnd(); 

    glTranslatef(3.0f, 0.0f, -6.0f); 

    glBegin(GL_QUADS); 
     glVertex3f(-1.0f, 1.0f, 0.0f); 
     glVertex3f(-1.0f, -1.0f, 0.0f); 
     glVertex3f(1.0f, -1.0f, 0.0f); 
     glVertex3d(1.0f, 1.0f, 0.0f); 
    glEnd(); 
} 

And my main : 

    #include <QApplication> 
    #include "HSGLWidget.hpp" 

    int main(int argc, char *argv[]) 
    { 
     QApplication app(argc, argv); 

     HSGLWidget myWin; 
     myWin.show(); 
     return app.exec(); 
    } 

我試圖用略低於我glew.h的#define QT_NO_OPENGL_ES_2聲明包括定義,但它仍然是相同的事情。在這種情況下我真的很失落。 有人能幫助我嗎?

+0

「o在項目屬性的聯動是正確的( glu32.lib)「你需要用** glew **來連接,你知道的。 – SigTerm

+0

我已經連接到glew32.lib了。我所有的聯繫都是糾正。我的程序和glew一起工作,但沒有glewinit調用。 – user1364743

+0

IIRC你不會得到一個鏈接器錯誤,除非你實際上引用了一個在glew庫中定義的符號(所以沒有錯誤,除非你實際上已經調用了glewInit在你的源代碼中)。該錯誤非常明顯,鏈接程序找不到glew庫,您應該重新檢查您的配置。 – Slicedpan

回答

0

鏈接失敗? 項目選項 - >連接器 - >輸入

放在那裏的GLEW(例如在我的項目:glew32.lib)

希望這有助於你