最近在写一套基础类库用于SG解包blob字段统计,在写完了所有程序编译时遇到一个郁闷无比的错误: MailBox.o(.text+0x124): In function `CMailBox::CMailBox[not-in-charge](CMmogAnalyseStatManager*)': ../src/MailBox.cpp:27: undefined reference to `CSgAnalyseStatBase::~CSgAnalyseStatBase [not-in-charge]()' MailBox.o(.text+0x182): In function `CMailBox::CMailBox[in-charge](CMmogAnalyseStatManager*)': ../src/MailBox.cpp:27: undefined reference to `CSgAnalyseStatBase::~CSgAnalyseStatBase [not-in-charge]()' MailBox.o(.gnu.linkonce.t._ZN8CMailBoxD1Ev+0x33): In function `CMailBox::~CMailBox [in-charge]()': ../include/MailBox.hpp:22: undefined reference to `CSgAnalyseStatBase::~CSgAnalyseStatBase [not-in-charge]()' MailBox.o(.gnu.linkonce.t._ZN8CMailBoxD1Ev+0x4f):../include/MailBox.hpp:22: undefined reference to `CSgAnalyseStatBase::~CSgAnalyseStatBase [not-in-charge]()' MailBox.o(.gnu.linkonce.t._ZN8CMailBoxD0Ev+0x33): In function `CMailBox::~CMailBox [in-charge deleting]()': ../include/MailBox.hpp:22: undefined reference to `CSgAnalyseStatBase::~CSgAnalyseStatBase [not-in-charge]()' MailBox.o(.gnu.linkonce.t._ZN8CMailBoxD0Ev+0x4f):../include/MailBox.hpp:22: more undefined references to `CSgAnalyseStatBase::~CSgAnalyseStatBase [not-in-charge]()' follow MailBox.o(.gnu.linkonce.r._ZTI8CMailBox+0x8): undefined reference to `typeinfo for CSgAnalyseStatBase' SgAnalyseStatBase.o(.text+0x1d): In function `CSgAnalyseStatBase::CSgAnalyseStatBase[not-in-charge](CMmogAnalyseStatManager*)': ../../sg_analyse_base/src/SgAnalyseStatBase.cpp:22: undefined reference to `vtable for CSgAnalyseStatBase' SgAnalyseStatBase.o(.text+0x117): In function `CSgAnalyseStatBase::CSgAnalyseStatBase[in-charge](CMmogAnalyseStatManager*)': ../../sg_analyse_base/src/SgAnalyseStatBase.cpp:22: undefined reference to `vtable for CSgAnalyseStatBase' collect2: ld returned 1 exit status make: *** [MailBox] Error 1 这个问题困扰了我好几天,上班时间比较多人打扰,周末到了,决心一定要在这个周末将问题解决。搜索“vtable for”时总是搜到Qt出现的undefined reference to `vtable for`,找不到问题所在,一筹莫展。将编译环境从slack ware换到SLES,还是出现同样的错误。仔细看看,所有obj文件都已正常生成,是在链接成bin文件的时候出错的。再从错误信息中找没有搜索过的关键词来搜索,尝试了许多关键词后终于在搜索“undefined reference to `typeinfo”时在http://www.wellho.net/上看到: undefined reference to typeinfo - C++ error message
There are some compiler and loader error messages that shout obviously as to their cause, but there are others that simply don't give the new user much of an indication as to what's really wrong. And most of those I get to know pretty quickly, so that I can whip around a room during a course, making suggestions to delegate to check for missing ; characters or double quotes, to check that they have used the right type of brackets for a list subscript and haven't unintentionally written a function call, etc.
Here's one of the more obscure messages from the Gnu C++ compiler - or rather from the loader:
g++ -o polygon shape.o circle.o square.o polygon.o circle.o(.gnu.linkonce.r._ZTI6Circle+0x8): undefined reference to `typeinfo for Shape' square.o(.gnu.linkonce.r._ZTI6Square+0x8): undefined reference to `typeinfo for Shape' polygon.o(.gnu.linkonce.t._ZN5ShapeC2Ev+0x8): In function `Shape::Shape()': : undefined reference to `vtable for Shape' collect2: ld returned 1 exit status
And you can be scratching you head for hour over that one!
The error? shape.o contains a base class from which classes are derived in circle.o and square.o .. but virtual function(s) in shape's definition are missing null bodies.
The fix? You've got line(s) like virtual float getarea() ; that should read virtual float getarea() {} ;
The complete (working) source code files for this example are available here
相关推荐
vtable 虚函数表 更加有效的理解虚函数
VTable,不只是一款高性能的多维数据分析表格,更是一个在行列间创作的方格艺术家。VTable 是 VisActor 可视化体系中的表格组件库,基于可视化渲染引擎 VRender 进行封装。 核心能力如下:性能极致:支持百万级数据...
在C++编程中,"vtable_hook"是一个高级主题,主要涉及到对象的多态性和运行时类型信息(RTTI)。vtable(虚拟函数表)是C++实现多态性的一个关键机制,它允许通过基类指针调用派生类重写的虚函数。下面将深入探讨...
《从Java到C的部分翻译器:深入理解vtable、函数指针、类型转换与继承》 在编程领域,Java和C是两种截然不同的语言,它们各有特点,但也有各自的局限性。本项目"Partial-Java-to-C-Translator"旨在为开发者提供一个...
标题中的“vtable.rar”可能是指一个包含有关虚函数表(Virtual Table,简称vtable)的示例代码,vtable是C++中实现多态性的一个关键机制。在C++中,当一个类声明了一个虚函数,编译器就会为这个类创建一个vtable,...
重要补充 2:使用简单方法编译运行 QT 程序,可能会出现如下错误:undefined reference to vtable for LCDRange 出现这个错误是由于在类中使用了 Q_OBJECT 宏。这种情况下就不能用一键式的简单方法来 build 了。老老...
本来是想学着做动态按键的,方法很多,可以很简单的。...遇到了纠结的问题,为了实现信号槽,需要加上Q_Object宏,此后又出现了undefined reference vtable for xxx的情况,最后发现了问题所在,以此作为经验吧。
本文将深入探讨C++中的虚函数表(Virtual Table,简称VTable)及其相关概念。 首先,虚函数是基类声明的一个成员函数,其目的是为了在运行时确定应该调用哪个类的实现。当基类指针或引用指向派生类对象时,如果调用...
在使用简化配置方法构建QT程序时,可能会遇到以下错误:“undefined reference to vtable for LCDRange”。出现这一错误的原因是在类中使用了`Q_OBJECT`宏。此时,建议按照第一种方法进行构建,即分三步完成构建过程...
vtable 项目的入门套件 见。
VTable 是 VisActor 可视化体系中的表格组件库,基于可视化渲染引擎 VRender 进行封装。 核心能力如下:性能极致:支持百万级数据快速运算与渲染。多维分析:多维数据自动分析与呈现。表现力强:提供灵活强大的图形...
【标题】"ARTDroid: ART 模拟器动态钩子与GSOC15项目" 在Android操作系统中,Dalvik虚拟机(Dalvik)曾是应用程序运行的主要平台,但自Android 5.0 Lollipop开始,它被Android RunTime (ART)所取代。ARTDroid项目,...
标题为“From C++ to Objective-C (从C++到Objective-C)”的文章主要探讨了从C++转向Objective-C的程序员应该了解的关键概念和差异。Objective-C是一种主要用在苹果公司产品开发上的面向对象的编程语言,特别是在Mac...
这种技术与静态联编形成对比,后者在编译时就已经确定了函数调用。在C++中,多态性使得程序员可以设计通用的代码,这些代码能够处理不同类型的对象,而无需知道这些对象的具体实现细节。 静态联编是C语言的主要特点...
在MSVC中,RTTI信息通常与Vtable紧密关联,包括类型信息结构(`__class_type_info`)、虚基类信息(`__virtual_inheritance_info`)等。这些结构提供了关于类层次结构的详细信息,例如基类的偏移量和访问权限。 在...
纯虚函数的引入主要是为了解决基类不能实例化以及强制派生类实现特定功能的问题。当在基类中定义纯虚函数(`virtual returntype function()=0;`),这个基类就成为抽象类,不能被实例化。派生类必须重载纯虚函数以...
将BCC模式的结果转换为WRF的intermediate file格式时,必须确保写入的变量名与Vtable文件中的定义一致,否则WRF的metgrid模块将无法识别并报错。此外,由于字节序问题,编译时需要添加`-convert big_endian`选项,...
1. 从存储空间角度,虚函数对应一个指向vtable虚函数表的指针,这大家都知道,可是这个指向vtable的指针其实是存储在对象的内存空间的。问题出来了,如果构造函数是虚的,就需要通过 vtable来调用,可是对象还没有...
在C++编程语言中,虚函数表(Virtual Function Table,简称vtable)是一个重要的概念,它主要用于实现多态性,这是面向对象编程的关键特性之一。本文将深入探讨虚函数表的工作原理、结构以及如何在实际编程中应用。 ...
它也使用VTable来存储虚函数指针,处理单继承时,子类对象的内存布局会包含父类的VTable,并且根据需要修改或扩展VTable。与Windows和Linux一样,Clang也支持RTTI,用于识别对象的动态类型。 在所有这些平台上,`...