Debugging 调试GCC中的vtable链接器错误

Debugging 调试GCC中的vtable链接器错误,debugging,gcc,linker,vtable,Debugging,Gcc,Linker,Vtable,使用GCC时,有时会出现如下隐晦错误: 对“vtable for classname”的未定义引用 当它不是由缺少的库引起时,这个不太具有描述性的错误消息总是会导致我逐行地挖掘代码文件,以找到虚拟函数缺少的实现。有没有办法让链接器告诉我它缺少哪一个虚拟函数,也许是一个标志或其他什么?或者它可能在告诉我,但我不明白它在说什么?来自: < >强>当构建C++时,链接器表示我的 构造函数、析构函数或虚函数 表未定义,但我定义了 他们 ISO C++标准规定 类的所有虚拟方法 不是纯虚拟的,必须定义,

使用GCC时,有时会出现如下隐晦错误:

对“vtable for classname”的未定义引用

当它不是由缺少的库引起时,这个不太具有描述性的错误消息总是会导致我逐行地挖掘代码文件,以找到虚拟函数缺少的实现。有没有办法让链接器告诉我它缺少哪一个虚拟函数,也许是一个标志或其他什么?或者它可能在告诉我,但我不明白它在说什么?

来自:

< >强>当构建C++时,链接器表示我的 构造函数、析构函数或虚函数 表未定义,但我定义了 他们

ISO C++标准规定 类的所有虚拟方法 不是纯虚拟的,必须定义, 但不需要任何诊断 违反这条规则 [class.virtual]/8。基于此, 假设,GCC只会发出 隐式定义的构造函数 赋值运算符,析构函数 和中的类的虚拟表 定义其名称的翻译单位 首先是这样的非内联方法

因此,如果您未能定义此 在特定方法中,链接器可以 抱怨缺乏定义 显然不相关的符号。 不幸的是,为了提高 此错误消息可能是 需要更改链接器,以及 这不可能总是做到。

解决方案是确保所有 不纯粹的虚拟方法是 定义请注意,析构函数必须 即使已声明,也无法定义 纯虚拟[class.dtor]/7.

我采用的解决方案是搜索类名和虚拟方法声明,并检查是否有任何定义。我没有找到其他解决办法