1

Visual Studio 2012 で小さな QT アプリケーション (バージョン 5.1.0 (msvc2012_64_opengl)、アドイン 1.2.2) をコーディングしました。GLU.h インクルードから始めましたが、プログラムは完全に動作します。しかし、glew.h からいくつかの関数を実装したいと考えています。この場合に最初に行うことは、'initializeGL' QT メソッドの先頭で 'glewInit' メソッドを呼び出すことです。しかし、私は次のエラーがあります:

error lnk2019 unresolved external symbol __glewInit

しかし、コードは glewInit を使用しなくても、#include "glu.h" ではなく #include "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 宣言を使用しようとしましたが、それでも同じです。私はこの状況の前で本当に迷っています。誰でも私を助けることができますか?

4

1 に答える 1

0

リンク失敗?プロジェクト オプション -> リンカー -> 入力

glew をそこに置きます (たとえば、私のプロジェクトでは: glew32.lib)

これがあなたを助けたことを願っています

于 2013-09-11T17:08:13.953 に答える