Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Qt version of OpenGL SuperBible Triange - undefined reference GLBatch



  • I'm new to Qt and I'm trying to implement the examples in the OpenGL SuperBible which uses GLTools. I'm using Qt Creator (Qt Creator 2.0.94 (2.1.0-rc1)).
    I expect that I'm missing something simple but I need some help.

    Thanks for any help.

    Dan
    I run qmake and then Build Project.
    I'm getting the following error from Build Project: Compile Output
    These are all defined in GLTools.h and are in the gltools.lib
    @
    g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mthreads -Wl -Wl,-subsystem,windows -o debug/SB_Triangle.exe debug/main.o debug/TriangleWidget.o debug/moc_TriangleWidget.o -L'c:/Qt/2010.05/qt/lib' -lglu32 -lopengl32 -lgdi32 -luser32 -lmingw32 -lqtmaind "C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib\glew32s.lib" "C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib\gltools.lib" "C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib\GlU32.Lib" -lQtOpenGLd4 -lQtGuid4 -lQtCored4
    debug/TriangleWidget.o: In function TriangleWidget': *D:\Development\GPU\code\C++\Qt\OpenGL SuperBible\Triangle\SB_Triangle-build-desktop/../SB_Triangle/TriangleWidget.cpp:6: undefined reference toGLBatch::GLBatch()'*@

    I'm using:

    • XP SP3
    • Qt Creator 2.0.94 (2.1.0-rc1)
    • Qt SDK - C:\Qt\2010.05

    SB_Triangle.pro file
    @
    QT += core gui
    QT += opengl
    TARGET = SB_Triangle
    TEMPLATE = app
    CONFIG += opengl glu glew gltools

    INCLUDEPATH += .
    INCLUDEPATH += C:\Qt\2010.05\qt\include\Qt
    INCLUDEPATH += D:\Development\GPU\CppLibs\GLEW\glew-1.5.8\include
    INCLUDEPATH += D:\Development\GPU\CppLibs\GLTools\include

    win32 : LIBS +=
    win32 : LIBS += $$quote(C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib\glew32s.lib)
    win32 : LIBS += $$quote(C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib\gltools.lib)

    win32 : LIBS += $$quote(C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib\GlU32.Lib)

    SOURCES += main.cpp
    TriangleWidget.cpp

    HEADERS += TriangleWidget.h

    FORMS += TriangleWidget.ui
    @

    The error is on line 6, - ui(new Ui::TriangleWidget)
    TriangleWidget.cpp
    @#include "TriangleWidget.h"
    #include "ui_TriangleWidget.h"

    TriangleWidget::TriangleWidget(QWidget *parent) :
    QGLWidget(parent),
    ui(new Ui::TriangleWidget)
    {
    ui->setupUi(this);
    }

    TriangleWidget::~TriangleWidget()
    {
    delete ui;
    }

    void TriangleWidget::ChangeSize(int w, int h)
    {
    glViewport(0, 0, w, h);
    }

    void TriangleWidget::SetupRC()
    {
    // Blue background
    glClearColor(0.0f, 0.0f, 1.0f, 1.0f );
    shaderManager.InitializeStockShaders();

    // Load up a triangle
    GLfloat vVerts[] = { -0.5f, 0.0f, 0.0f,
    0.5f, 0.0f, 0.0f,
    0.0f, 0.5f, 0.0f };

    triangleBatch.Begin(GL_TRIANGLES, 3);
    triangleBatch.CopyVertexData3f(vVerts);
    triangleBatch.End();
    }

    void TriangleWidget::RenderScene(void)
    {
    // Clear the window with current clearing color
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);

    GLfloat vRed[] = { 1.0f, 0.0f, 0.0f, 1.0f };
    shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed);
    triangleBatch.Draw();

    // Perform the buffer swap to display back buffer
    //glutSwapBuffers();
    swapBuffers();

    }
    @

    TriangleWidget.h
    @#ifndef TRIANGLEWIDGET_H
    #define TRIANGLEWIDGET_H

    #include <GL/glew.h>
    #include <QGLWidget>

    #include <GLTools.h> // OpenGL toolkit
    #include <GLShaderManager.h> // Shader Manager Class

    namespace Ui {
    class TriangleWidget;
    }

    // Based on Triangle.cpp in OpenGL SuperBible 5th edition
    // Port to Qt 4.7 - 3.20.2011 dpc
    // Our first OpenGL program that will just draw a triangle on the screen.

    class TriangleWidget : public QGLWidget
    {
    Q_OBJECT

    public:
    explicit TriangleWidget(QWidget *parent = 0);
    ~TriangleWidget();

    protected:
    ///////////////////////////////////////////////////////////////////////////////
    // Window has changed size, or has just been created. In either case, we need
    // to use the window dimensions to set the viewport and the projection matrix.
    void ChangeSize(int w, int h);

    ///////////////////////////////////////////////////////////////////////////////
    // This function does any needed initialization on the rendering context.
    // This is the first opportunity to do any OpenGL related tasks.
    void SetupRC();

    ///////////////////////////////////////////////////////////////////////////////
    // Called to draw scene
    void RenderScene(void);

    private:
    Ui::TriangleWidget *ui;
    GLBatch triangleBatch;
    GLShaderManager shaderManager;
    };

    #endif // TRIANGLEWIDGET_H
    @



  • Looks like you are building with MinGW GCC, but trying to link with Microsoft Visual C++ libraries. The two compilers are not compatible and libraries built with one cannot be mixed with the other.


Log in to reply