undefined reference to `gluPerspective'



  • Hei, jei ,jei ,jei, jei, das mit dem nervigen Compiler hört bei mir heute nicht mehr auf. Jetzt meldet er mir folgendes, womit ich mal wieder nix anfangen kann:

    g++  -o openGL DistanceWidget.o main.o MyGLWidget.o NavigationWidget.o RotationWidget.o moc_myglwidget.o  -L/usr/share/qt3/lib -L/usr/X11R6/lib -lqt-mt -lXext -lX11 -lm
    MyGLWidget.o(.text+0x115): In function `MyGLWidget::resizeGL(int, int)':
    : undefined reference to `gluPerspective'
    collect2: ld returned 1 exit status
    make: *** [openGL] Error 1
    

    Dabei hab ich an dieser Stelle im Code garnichts geändert ??? Ging zumindest bevor ich den moc hab drüber gehen lassen.

    mfg
    tom



  • Hast Du die glu.h eingebunden?



  • yes, hab ich. Hier ist der Code:

    von der HeaderDatei:

    #include <qwidget.h>
    #include <qgl.h>
    #include <GL/glu.h>
    #include <qgdict.h>
    #include <qtranslator.h>
    #include <qstring.h>
    #include <qapplication.h>
    
    #define null NULL
    
    class MyGLWidget : public QGLWidget { 
    
        Q_OBJECT
    
    public:
        MyGLWidget( QWidget* parent = null, char* name = null);
    
    protected:
        void initializeGL();
        void resizeGL(int w, int h);
        void paintGL();
    
    private:
        GLfloat x, y, z;
        GLfloat rotation;
    
    public slots:
        void setAngle(int);
    
    };
    

    und hier das cpp file dazu:

    #include "myglwidget.h"
    #include <GL/glu.h>
    
    #define null NULL
    
    MyGLWidget::MyGLWidget( QWidget* parent , char* name ) : QGLWidget(parent, name) {
    }
    
    void MyGLWidget::initializeGL() {
        /*...initalisierung von openGL..*/
    }
    
    void MyGLWidget::resizeGL(int w, int h) {
        if( h == 0 ) {
    	h = 1;
        }
        glViewport(0, 0, w, h);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
    
        gluPerspective( 45.0f , (GLfloat) w / (GLfloat) h, 0.1f, 100.0f );
    
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
    }
    
    void MyGLWidget::paintGL() {
        /*...hier werden ein paar Sachen gemalt...*/
    }
    
    void MyGLWidget::setAngle(int angle) {
        this->rotation = angle;    // Note: angle is parsed into float automatically !!!
        this->repaint();
    }
    

    mfg
    tom



  • Naja, ich würde mal sagen, du hast vergessen die glu.lib oder wie die auch immer heißt, vergessen mit zu verlinken.

    Wenn das so weiter geht, lohnt es sich ja schon fast für dich hier zu registrieren.



  • oooohhhh mann, ja das iss es. Ich glaub ich hau gleich meine Kopf an die Wand. Wenn ich mit qmake ein Makefile mache, dann vergisst qmake IMMER noch zusätzlich -lGLU mit an den Compiler zu übergeben.

    Naja, wie gesagt, nochmal super fetten dank.

    mfg
    tom



  • Hast Du die glu.h eingebunden?

    Das ist jetzt das 57 Mal, dass jemand eine fehlende Headerdatei für ein Linkerfehler verantwortlich macht.

    Tut mir doch bitte mal den gefallen (oder besser tut euch den gefallen) und schaut euch das C++ (Seperate)-Übersetzungsmodell an.
    Unter der Annahme, dass man die grundlegenden Designregeln für Header einhält, kann ein Linkerfehler nicht durch einen fehlenden Header hervorgerufen werden. Fehlende Header führen zu Compile-Zeit fehlern. Wenn sich aber der Linker über fehlende externe Symbole beschwert, dann fehlt eine obj-Datei bzw. eine Bibliothek.


Anmelden zum Antworten