最近在写一套基础类库用于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
class ATL_NO_VTABLE CPolyCtl : ... public IObjectSafetyImpl<CPolyCtl> // ATL's version of // IObjectSafety { public: BEGIN_COM_MAP(CPolyCtl) ... COM_INTERFACE_ENTRY_IMPL(IObjectSafety) // Tie ...
相关推荐
vtable 虚函数表 更加有效的理解虚函数
本来是想学着做动态按键的,方法很多,可以很简单的。...遇到了纠结的问题,为了实现信号槽,需要加上Q_Object宏,此后又出现了undefined reference vtable for xxx的情况,最后发现了问题所在,以此作为经验吧。
vtable 项目的入门套件 见。
vtable 项目的入门套件 见。
C++ 虚函数表解析。C++中的虚函数的作用主要是实现了多态的机制。.doc文件。教程
VTable 是 VisActor 可视化体系中的表格组件库,基于可视化渲染引擎 VRender 进行封装。 核心能力如下:性能极致:支持百万级数据快速运算与渲染。多维分析:多维数据自动分析与呈现。表现力强:提供灵活强大的图形...
c/c++ 简单回调实例,回调函数本质上提供了一种与常规的上层调用下层代码相反的模式,使得底层代码也有机会反调高层的代码,这大大提升了代码的能力。简单明了。
vtable_hook 挂钩 vtables 从 2015 年 1 月开始 -
1. 从存储空间角度,虚函数对应一个指向vtable虚函数表的指针,这大家都知道,可是这个指向vtable的指针其实是存储在对象的内存空间的。问题出来了,如果构造函数是虚的,就需要通过 vtable来调用,可是对象还没有...
资源分类:Python库 所属语言:Python 资源全名:pydjondb-3.5.60324.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
对于Rust-to-Rust ffi,重点是创建在程序启动时加载的库,并进行加载时类型检查。 该库允许定义可以在运行时加载的Rust库,即使它们是使用与依赖它的板条箱不同的Rust版本构建的。 这些是该库的一些用例: 将Rust...
(必须通过IDispatch接口进行字符串的小写转换调用,两个接口之间使用QueryInterface()使用进行切换,然后通过Vtable直接调用普通COM接口中的求面积和除法调用,自行选取原始接口指针或智能指针)。
ARTDroid:愚弄机器人以获得乐趣和利润
中,s 也必须是双精度浮点型,以便与sin函数的返回值一致。所以在说明部分,把s说明为双精度浮点型。但是,也有一类函数,调用后并不需要向调用者返回函数值, 这种函数可以定义为“空类型”。其类型说明符为void。...
class ATL_NO_VTABLE CPolyCtl : ... public IObjectSafetyImpl<CPolyCtl> // ATL's version of // IObjectSafety { public: BEGIN_COM_MAP(CPolyCtl) ... COM_INTERFACE_ENTRY_IMPL(IObjectSafety) // Tie ...
友元函数与友元类、引用与指针那些事、深入浅出C++虚函数的vptr与vtable、宏那些事、范围解析运算符那些事、从初级到高级的enum那些事、纯虚函数和抽象类、volatile、virtual、using、union、this、struct_class、...
本书深入浅出地讲解了 HotSpot 虚拟机的工作原理,将隐藏在它内部的本质内容逐一呈现在读者面前,包 括 OpenJDK 与 HotSpot 项目、编译和调试 HotSpot 的方法、HotSpot 内核结构、Launcher、OOP-Klass 对象表 示系统...
Zig接口轻松解决您的所有Zig动态调度需求!特征完全解耦的接口和实现控制接口对象的存储/所有权Comptime支持(包括仅comptime接口) 异步功能部分支持(在上阻止) 可选功能支持支持手动编写的vtable例子 const ...
一种简单的实验性编程语言,实现为预处理器,可获取ObjectiveK源代码并从中生成C源代码。ObjectiveK的设计目标提供面向对象的编码机制,但通过使用vtables可以更快使用类似于C的语法,但更喜欢使用清晰的标识符而...
研究了一下,总算勉强能够融会贯通了c写成OOP还蛮有乐趣的编译环境:Xcode3.2.3+gcc4.2 代码如下:#ifndef OBJECT_H#define OBJECT_Htypedef void (*...typedef struct _baseCmd{ Object_Vtable vtable;}BaseCmd;//