Avatar billede emmek Nybegynder
12. maj 2005 - 10:09 Der er 7 kommentarer

Linking problem

Det på engelsk af hensyn til at jeg også har stilt spørgsmålet i andre forum..
Jeg bruger gcc 3.4.3, på hhv. FreeBSD 5.4 RC2 og/eller 5.3 RELEASE. Jeg kan bare ikke finde noget ordentligt dokumentation på fejlmeldingerne fra GCC.

I've implemented the statemachine pattern in AggState pasted into the bottom of this post..
I'm getting these linker errors when trying to build the main executable.

My problem is I don't really know what the errormessages mean.. Thus I can't fix the problem.
Any of you guys able to help me? Or at least point me in the direction of a better discription of the errormessage, then just the errormessage.


g++ -I/usr/local/include/mysql++/ -I/usr/local/include/ -I/usr/local/include/mysql/  -L/usr/local/lib -L/usr/local/lib/mysql  -pthread -lqosmysql -lqosthreads -lqoslog -lqoslegacynetstuff -lqoscommon -lqosmeasuring  main.cpp -o measuring
/usr/local/lib/libqosmeasuring.so: undefined reference to `typeinfo for AggState'
/usr/local/lib/libqosmeasuring.so: undefined reference to `vtable for AggState'
*** Error code 1




Code:
#ifndef _AGGSTATE_H_
#define _AGGSTATE_H_

//#include <map>
#include <list>
#include <set>
#include <functional>
#include <utility>
#include <limits>
#include <math.h>
#include <sys/time.h>
#include "Packet.h"
#include "AggregationPacket.h"
#include "../common/QoSTime.h"

class AggState
{
public:
        AggState(      std::list<AggregationPacket> *win,
                                std::list<AggregationPacket> *buf,
                                QoSTime &winStart, QoSTime &winEnd) :
                                start(winStart), end(winEnd)
        {
                this->nnp = true;
                this->win_rdy = false;
                this->win = win;
                this->buf = buf;
        }
        virtual ~AggState() {};
        /* handlePacket handles the packet, and returns the
        * next state..
        * */
        virtual AggState *handlePacket(std::list<AggregationPacket>::iterator *itPtr);
        virtual bool needsNextPacket()  { return this->nnp; }
        virtual bool windowIsReady()    { return this->win_rdy; }
        static AggState *getInitialState(
                                std::list<AggregationPacket> *win,
                                std::list<AggregationPacket> *buf,
                                QoSTime &winStart, QoSTime &winEnd);
protected:
        bool nnp;
        bool win_rdy;
        QoSTime start;
        QoSTime end;
        std::list<AggregationPacket> *win;
        std::list<AggregationPacket> *buf;
};

class AggUpState : public AggState
{
public:
        virtual ~AggUpState() {}
        AggUpState(std::list<AggregationPacket> *win,
                                std::list<AggregationPacket> *buf,
                                QoSTime &winStart, QoSTime &winEnd) :
                                                AggState(win, buf, winStart, winEnd) { }
        virtual AggState *handlePacket(std::list<AggregationPacket>::iterator *itPtr);
};
class AggPotUpState : public AggState
{
public:
        virtual ~AggPotUpState() {}
        AggPotUpState(std::list<AggregationPacket> *win,
                                std::list<AggregationPacket> *buf,
                                QoSTime &winStart,
                                QoSTime &winEnd,
                                QoSTime &goodPacketStartTime) :
                                AggState(win, buf, winStart, winEnd),
                                goodPacketStartTime(goodPacketStartTime) { }
        virtual AggState *handlePacket(std::list<AggregationPacket>::iterator *itPtr);
protected:
        QoSTime goodPacketStartTime;
};

class AggPotDownState : public AggState
{
public:
        virtual ~AggPotDownState() {}
        AggPotDownState(std::list<AggregationPacket> *win,
                                std::list<AggregationPacket> *buf,
                                QoSTime &winStart,
                                QoSTime &winEnd,
                                QoSTime &lossStartTime) :
                                AggState(win, buf, winStart, winEnd),
                                lossPacketStartTime(lossStartTime) { }
        virtual AggState *handlePacket(std::list<AggregationPacket>::iterator *itPtr);
protected:
        QoSTime lossPacketStartTime;
};

class AggDownState : public AggState
{
public:
        virtual ~AggDownState() {}
        AggDownState(std::list<AggregationPacket> *win,
                                std::list<AggregationPacket> *buf,
                                QoSTime &winStart, QoSTime &winEnd) :
                                                        AggState(win, buf, winStart, winEnd) { }
        virtual AggState *handlePacket(std::list<AggregationPacket>::iterator *itPtr);
};



#endif //_AGGSTATE_H_
Avatar billede arne_v Ekspert
12. maj 2005 - 10:18 #1
Hvordan ser din main ud ?

Ligger implementeringen i main.cpp eller i en seperat .cpp ?
Avatar billede emmek Nybegynder
12. maj 2005 - 11:08 #2
Ligger i main.cpp:
#include <unistd.h>
#include <iostream>
#include <sys/time.h>
#include <sys/resource.h>
#include "Measuring/Measuring.h"
#include "common/Daemon.h"


int main()
{
        std::cout << "Starting Measuring" << std::endl;

        if(setpriority(PRIO_PROCESS, 0, -10) == -1)
        {
                std::cout << "unable to change process priority" << std::endl;
                return 0;
        }

        //Daemon::detach("/usr/bin/QoS", "/var/run/measuring.pid");

        Measuring::getInstancePtr()->start();

        while(true) sleep(86400);

        return 0;
}

Men AggState er en del at et shared lib, som hedder libqosmeasuring.so som jeg selv har bygget..
Avatar billede emmek Nybegynder
12. maj 2005 - 17:14 #3
Har fundet et link der beskriver lidt af det der kunne være årsagen, men har endnu ikke dekodet hvad en løsning kunne være..
Avatar billede emmek Nybegynder
12. maj 2005 - 17:18 #4
Avatar billede emmek Nybegynder
12. maj 2005 - 18:03 #5
Hmm problemet forsvinder hvis jeg fjerner virtual fra den vedhæftede kode..
Hvad gør jeg forkert??
Avatar billede arne_v Ekspert
13. maj 2005 - 09:40 #6
jeg tror at vi skal vide mere om koden inden vi kan komme videre
Avatar billede emmek Nybegynder
13. maj 2005 - 10:50 #7
Jeg tror nu mest at jeg har lavet en bøf med arv og brugen af virtual i class AggState. Den kode er allerede vedhæftet.
Det eneste jeg har gjort for at workaround'e er at fjerne brugen af virtual i class AggState og alle nedarvede klasser (også vist i et af de første posts..)
Så jeg tror at det er der fejlretningsindsatsen skal fokuseres..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester