[Click] click Digest, Vol 94, Issue 3

Dongyu Yang yangdy.nwpu at gmail.com
Tue May 17 08:51:13 EDT 2011


Thank you for Eddie!

    The problem is this, when i define new elements as bellow:


class GenericAlgorithm : public Element{
      public:
      GenericAlgorithm() {}
      virtual ~GenericAlgorithm() {}

      virtual int algorithm(Vector<struct path_info *> source_routes,
 Vector<IPAddress> *ret_source_routes);
}


    the element CAMAlgorithm define as bellow:


class CAMAlgorithm : public GenericAlgorithm{
      public:
          CAMAlgorithm();
          ~CAMAlgorithm();

          const char *class_name() const { return "CAMAlgorithm"; }
          const char *port_count() const { return PORTS_0_0; }
          const char *processing() const { return AGNOSTIC; }

          int configure(Vector<String> &conf, ErrorHandler *errh);
          bool can_live_reconfigure() const { return false; }
          void *cast(const char *);

          int algorithm(Vector<struct path_info *> source_routes,
Vector<IPAddress>
*ret_source_routes);

      private:
          uint8_t _parameter_b;
          uint8_t _parameter_u;
};


then the problem happened, compile OK, link error:

..... grid/genericalgorithm.hh:14: undefined reference to `vtable for
GenericAlgorithm
camalgorithm.o:(.rodata._ZTI12CAMAlgorithm[typeinfo for CAMAlgorithm]+0x8):
undefined reference to `typeinfo for GenericAlgorithm'



 but when I add const, as bellow , it is OK,


class GenericAlgorithm : public Element{
      public:
      GenericAlgorithm() {}
      virtual ~GenericAlgorithm() {}

      virtual int algorithm(Vector<struct path_info *> source_routes,
 Vector<IPAddress> *ret_source_routes)* const*;
}


    the element CAMAlgorithm define as bellow:


class CAMAlgorithm : public GenericAlgorithm{
      public:
          CAMAlgorithm();
          ~CAMAlgorithm();

          const char *class_name() const { return "CAMAlgorithm"; }
          const char *port_count() const { return PORTS_0_0; }
          const char *processing() const { return AGNOSTIC; }

          int configure(Vector<String> &conf, ErrorHandler *errh);
          bool can_live_reconfigure() const { return false; }
          void *cast(const char *);

          int algorithm(Vector<struct path_info *> source_routes,
Vector<IPAddress>
*ret_source_routes) *const*;

      private:
          uint8_t _parameter_b;
          uint8_t _parameter_u;
};

   so maybe it's my problem!

  Thanks for your help!




在 2011年5月12日 上午2:34,zi feng <zfeng at cs.ucr.edu>写道:

> Thank you Eddie.
>
> I have fixed the problem :)
>
> Zi
>
>
> 2011/5/11 Eddie Kohler <kohler at cs.ucla.edu>
>
>> Zi Feng,  Dongyu,
>>
>> I could not replicate this problem.  Are you still having it?  It might be
>> that your compiler is not emitting the vtables for these generic
>> interfaces,
>> which are defined only in header files.  I added some .cc files too to
>> attempt
>> to fix the problem -- try "make elemlist; make" -- but I am not sure it
>> will work.
>>
>> Eddie
>>
>>
>> On 4/19/11 6:37 PM, Dongyu Yang wrote:
>> > Hello, zi feng!
>> >
>> >        do you find what case the problem, I have the similar problem,
>> would
>> > you tell me how to solve it?
>> >
>> >        Thanks!!
>> >
>> >
>> >
>> >
>> > 2011/4/7<click-request at pdos.csail.mit.edu>
>> >
>> >> Send click mailing list submissions to
>> >>         click at amsterdam.lcs.mit.edu
>> >>
>> >> To subscribe or unsubscribe via the World Wide Web, visit
>> >>         https://amsterdam.lcs.mit.edu/mailman/listinfo/click
>> >> or, via email, send a message with subject or body 'help' to
>> >>         click-request at amsterdam.lcs.mit.edu
>> >>
>> >> You can reach the person managing the list at
>> >>         click-owner at amsterdam.lcs.mit.edu
>> >>
>> >> When replying, please edit your Subject line so it is more specific
>> >> than "Re: Contents of click digest..."
>> >>
>> >> Today's Topics:
>> >>
>> >>    1. compiling problem with gridgenricmetric in click (zi feng)
>> >>
>> >>
>> >> ---------- 已转发邮件 ----------
>> >> From: zi feng<zfeng at cs.ucr.edu>
>> >> To: click<click at pdos.csail.mit.edu>
>> >> Date: Wed, 6 Apr 2011 00:10:52 -0700
>> >> Subject: [Click] compiling problem with gridgenricmetric in click
>> >> Hi all,
>> >>
>> >> I am having a problem compiling click. Everything was working before. I
>> >> just
>> >> did a 'make clean' then I configured it again, then 'make elemlist' and
>> >> 'make'. Then I get the following errors with reference to
>> >> gridgenericmetric:
>> >> -----------------------------------------
>> >>   LINK click
>> >> bottleneckmetric.o(.text+0x5b): In function
>> >> `BottleneckMetric::~BottleneckMetric()':
>> >> ../elements/grid/gridgenericmetric.hh:17: undefined reference to
>> `vtable
>> >> for
>> >> GridGenericMetric'
>> >> bottleneckmetric.o(.text+0x77): In function
>> >> `BottleneckMetric::~BottleneckMetric()':
>> >> ../elements/grid/gridgenericmetric.hh:17: undefined reference to
>> `vtable
>> >> for
>> >> GridGenericMetric'
>> >> bottleneckmetric.o(.text+0x94): In function
>> >> `BottleneckMetric::~BottleneckMetric()':
>> >> ../elements/grid/gridgenericmetric.hh:17: undefined reference to
>> `vtable
>> >> for
>> >> GridGenericMetric'
>> >> bottleneckmetric.o(.gnu.linkonce.r._ZTV16BottleneckMetric+0x80):
>> undefined
>> >> reference to `GridGenericMetric::get_link_etx(EtherAddress const&,
>> bool)'
>> >> bottleneckmetric.o(.gnu.linkonce.r._ZTI16BottleneckMetric+0x8):
>> undefined
>> >> reference to `typeinfo for GridGenericMetric'
>> >> e2elossmetric.o(.text+0x63): In function
>> `E2ELossMetric::~E2ELossMetric()':
>> >> ../elements/grid/gridgenericmetric.hh:17: undefined reference to
>> `vtable
>> >> for
>> >> GridGenericMetric'
>> >> e2elossmetric.o(.text+0x7f): In function
>> `E2ELossMetric::~E2ELossMetric()':
>> >> ../elements/grid/gridgenericmetric.hh:17: undefined reference to
>> `vtable
>> >> for
>> >> GridGenericMetric'
>> >> e2elossmetric.o(.text+0x9c): In function
>> `E2ELossMetric::~E2ELossMetric()':
>> >> ../elements/grid/gridgenericmetric.hh:17: undefined reference to
>> `vtable
>> >> for
>> >> GridGenericMetric'
>> >> e2elossmetric.o(.gnu.linkonce.r._ZTV13E2ELossMetric+0x80): undefined
>> >> reference to `GridGenericMetric::get_link_etx(EtherAddress const&,
>> bool)'
>> >> e2elossmetric.o(.gnu.linkonce.r._ZTI13E2ELossMetric+0x8): undefined
>> >> reference to `typeinfo for GridGenericMetric'
>> >> etx2metric.o(.text+0x63): In function `ETX2Metric::~ETX2Metric()':
>> >> ../elements/grid/gridgenericmetric.hh:17: undefined reference to
>> `vtable
>> >> for
>> >> GridGenericMetric'
>> >> etx2metric.o(.text+0x7f): In function `ETX2Metric::~ETX2Metric()':
>> >> ../elements/grid/gridgenericmetric.hh:17: undefined reference to
>> `vtable
>> >> for
>> >> GridGenericMetric'
>> >> etx2metric.o(.text+0x9c): In function `ETX2Metric::~ETX2Metric()':
>> >> ../elements/grid/gridgenericmetric.hh:17: undefined reference to
>> `vtable
>> >> for
>> >> GridGenericMetric'
>> >> etx2metric.o(.gnu.linkonce.r._ZTV10ETX2Metric+0x80): undefined
>> reference to
>> >> `GridGenericMetric::get_link_etx(EtherAddress const&, bool)'
>> >> etx2metric.o(.gnu.linkonce.r._ZTI10ETX2Metric+0x8): undefined reference
>> to
>> >> `typeinfo for GridGenericMetric'
>> >> etxmetric.o(.text+0x63): In function `ETXMetric::~ETXMetric()':
>> >> ../elements/grid/gridgenericmetric.hh:17: undefined reference to
>> `vtable
>> >> for
>> >> GridGenericMetric'
>> >> etxmetric.o(.text+0x7f): In function `ETXMetric::~ETXMetric()':
>> >> ../elements/grid/gridgenericmetric.hh:17: undefined reference to
>> `vtable
>> >> for
>> >> GridGenericMetric'
>> >> etxmetric.o(.text+0x9c): In function `ETXMetric::~ETXMetric()':
>> >> ../elements/grid/gridgenericmetric.hh:17: undefined reference to
>> `vtable
>> >> for
>> >> GridGenericMetric'
>> >> etxmetric.o(.gnu.linkonce.r._ZTI9ETXMetric+0x8): undefined reference to
>> >> `typeinfo for GridGenericMetric'
>> >> hopcountmetric.o(.text+0x4b): In function
>> >> `HopcountMetric::~HopcountMetric()':
>> >> ../elements/grid/gridgenericmetric.hh:17: undefined reference to
>> `vtable
>> >> for
>> >> GridGenericMetric'
>> >> hopcountmetric.o(.text+0x67): In function
>> >> `HopcountMetric::~HopcountMetric()':
>> >> ../elements/grid/gridgenericmetric.hh:17: undefined reference to
>> `vtable
>> >> for
>> >> GridGenericMetric'
>> >> hopcountmetric.o(.text+0x84): In function
>> >> `HopcountMetric::~HopcountMetric()':
>> >> ../elements/grid/gridgenericmetric.hh:17: undefined reference to
>> `vtable
>> >> for
>> >> GridGenericMetric'
>> >> hopcountmetric.o(.gnu.linkonce.r._ZTV14HopcountMetric+0x80): undefined
>> >> reference to
>> >> `GridGenericMetric::get_link_etx(EtherAd
>> >> dress const&, bool)'
>> >> hopcountmetric.o(.gnu.linkonce.r._ZTI14HopcountMetric+0x8): undefined
>> >> reference to `typeinfo for GridGenericMetric'
>> >> lirmetric.o(.text+0x5b): In function `LIRMetric::~LIRMetric()':
>> >> ../elements/grid/gridgenericmetric.hh:17: undefined reference to
>> `vtable
>> >> for
>> >> GridGenericMetric'
>> >> lirmetric.o(.text+0x77): In function `LIRMetric::~LIRMetric()':
>> >> ../elements/grid/gridgenericmetric.hh:17: undefined reference to
>> `vtable
>> >> for
>> >> GridGenericMetric'
>> >> lirmetric.o(.text+0x94): In function `LIRMetric::~LIRMetric()':
>> >> ../elements/grid/gridgenericmetric.hh:17: undefined reference to
>> `vtable
>> >> for
>> >> GridGenericMetric'
>> >> lirmetric.o(.gnu.linkonce.r._ZTV9LIRMetric+0x80): undefined reference
>> to
>> >> `GridGenericMetric::get_link_etx(EtherAddress
>> >> const
>> >> &, bool)'
>> >> lirmetric.o(.gnu.linkonce.r._ZTI9LIRMetric+0x8): undefined reference to
>> >> `typeinfo for GridGenericMetric'
>> >> lirmetric.o(.gnu.linkonce.r._ZTI9LIRMetric+0x8): undefined reference to
>> >> `typeinfo for GridGenericMetric'
>> >> threshmetric.o(.text+0x6b): In function
>> >> `ThresholdMetric::~ThresholdMetric()':
>> >> ../elements/grid/gridgenericmetric.hh:17: undefined reference to
>> `vtable
>> >> for
>> >> GridGenericMetric'
>> >> threshmetric.o(.text+0x87): In function
>> >> `ThresholdMetric::~ThresholdMetric()':
>> >> ../elements/grid/gridgenericmetric.hh:17: undefined reference to
>> `vtable
>> >> for
>> >> GridGenericMetric'
>> >> threshmetric.o(.text+0xa4): In function
>> >> `ThresholdMetric::~ThresholdMetric()':
>> >> ../elements/grid/gridgenericmetric.hh:17: undefined reference to
>> `vtable
>> >> for
>> >> GridGenericMetric'
>> >> threshmetric.o(.gnu.linkonce.r._ZTV15ThresholdMetric+0x80): undefined
>> >> reference to
>> >> `GridGenericMetric::get_link_etx(EtherAdd
>> >> ress const&, bool)'
>> >> threshmetric.o(.gnu.linkonce.r._ZTI15ThresholdMetric+0x8): undefined
>> >> reference to `typeinfo for GridGenericMetric'
>> >> yarvismetric.o(.text+0x5b): In function
>> `YarvisMetric::~YarvisMetric()':
>> >> ../elements/grid/gridgenericmetric.hh:17: undefined reference to
>> `vtable
>> >> for
>> >> GridGenericMetric'
>> >> yarvismetric.o(.text+0x77): In function
>> `YarvisMetric::~YarvisMetric()':
>> >> ../elements/grid/gridgenericmetric.hh:17: undefined reference to
>> `vtable
>> >> for
>> >> GridGenericMetric'
>> >> yarvismetric.o(.text+0x94): In function
>> `YarvisMetric::~YarvisMetric()':
>> >> ../elements/grid/gridgenericmetric.hh:17: undefined reference to
>> `vtable
>> >> for
>> >> GridGenericMetric'
>> >> yarvismetric.o(.gnu.linkonce.r._ZTV12YarvisMetric+0x80): undefined
>> >> reference
>> >> to
>> >> `GridGenericMetric::get_link_etx(EtherAddres
>> >> s const&, bool)'
>> >> yarvismetric.o(.gnu.linkonce.r._ZTI12YarvisMetric+0x8): undefined
>> reference
>> >> to `typeinfo for GridGenericMetric'
>> >> collect2: ld returned 1 exit status
>> >> make: *** [click] Error 1
>> >> --------------------------------------
>> >>
>> >> I have checked GridGenricMetric.hh and everything looks good. What I do
>> not
>> >> get is that it used to work well before I 'make clean'.
>> >>
>> >> If anyone has any clue about this problem or any suggestions, I will
>> really
>> >> appreciate it a lot.
>> >>
>> >> Thanks!!
>> >> Zi
>> >>
>> >>
>> >> _______________________________________________
>> >> click mailing list
>> >> click at amsterdam.lcs.mit.edu
>> >> https://amsterdam.lcs.mit.edu/mailman/listinfo/click
>> >>
>> >>
>> > _______________________________________________
>> > click mailing list
>> > click at amsterdam.lcs.mit.edu
>> > https://amsterdam.lcs.mit.edu/mailman/listinfo/click
>>
>>
>


More information about the click mailing list