[oclug] undefined reference to 'vtable

Patrick Smith patsmith at pobox.com
Sun Jul 6 09:44:57 EDT 2003


Francis J. A. Pinteric wrote:
>>Bob Lockie wrote:
>>>Has anyone seen this linker error before?
> 
> Anyway, the problem is C++ related and it's because not all the library
> files needed are being passed to the linker. I don't know the app you're
> trying to link, but there is a workaround you can try.
> 
> I've seen some programmes fail to link if your makefile is trying to
> link using just `ld' in linking LyX. Change the link command to `g++',
> fixing some of the command syntax as required. That might work.
> Otherwise, I don't know off hand to fix it.

Also, from the gcc 3.3 FAQ:

> When building C++, the linker says my constructors, destructors or virtual
> tables are undefined, but I defined them
> 
>    The  ISO  C++  Standard  specifies that all virtual methods of a class
>    that  are  not  pure-virtual must be defined, but does not require any
>    diagnostic  for  violations  of  this rule [class.virtual]/8. Based on
>    this   assumption,   GCC   will   only  emit  the  implicitly  defined
>    constructors,  the assignment operator, the destructor and the virtual
>    table  of  a class in the translation unit that defines its first such
>    non-inline method.
> 
>    Therefore,  if  you  fail to define this particular method, the linker
>    may  complain  about  the lack of definitions for apparently unrelated
>    symbols.  Unfortunately,  in  order  to improve this error message, it
>    might  be  necessary  to  change  the linker, and this can't always be
>    done.
> 
>    The  solution  is to ensure that all virtual methods that are not pure
>    are  defined.  Note  that  a  destructor must be defined even if it is
>    declared pure-virtual [class.dtor]/7.




More information about the OCLUG mailing list