我在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聲明包括定義,但它仍然是相同的事情。在這種情況下我真的很失落。 有人能幫助我嗎?
「o在項目屬性的聯動是正確的( glu32.lib)「你需要用** glew **來連接,你知道的。 – SigTerm
我已經連接到glew32.lib了。我所有的聯繫都是糾正。我的程序和glew一起工作,但沒有glewinit調用。 – user1364743
IIRC你不會得到一個鏈接器錯誤,除非你實際上引用了一個在glew庫中定義的符號(所以沒有錯誤,除非你實際上已經調用了glewInit在你的源代碼中)。該錯誤非常明顯,鏈接程序找不到glew庫,您應該重新檢查您的配置。 – Slicedpan