猿问

g ++ undefined对typeinfo的引用

g ++ undefined对typeinfo的引用

我只是遇到了以下错误(并在线找到了解决方案,但它在Stack Overflow中不存在):

(.gnu.linkonce。[stuff]):对[方法] [目标文件]的未定义引用:(。gnu.linkonce。[stuff]):对[classname]的`typeinfo的未定义引用

为什么可能会得到这些“未定义的typeinfo引用”链接器错误之一?

(如果你能解释幕后发生的事情,可以给予奖励。)


元芳怎么了
浏览 468回答 3
3回答

临摹微笑

一个可能的原因是因为您在没有定义虚拟函数的情况下声明它。如果在没有在同一编译单元中定义它的情况下声明它,则表明它已在其他位置定义 - 这意味着链接器阶段将尝试在其他编译单元(或库)中找到它。定义虚函数的一个示例是:virtual void fn() { /* insert code here */ }在这种情况下,您将一个定义附加到声明,这意味着链接器以后不需要解析它。这条线virtual void fn();声明fn()而不定义它,并将导致您询问的错误消息。它与代码非常相似:extern int i;int *pi = &i;表明整数i是在另一个编译单元中声明的,必须在链接时解析(否则pi不能设置为它的地址)。

FFIVE

混合-fno-rtti和-frtti编码时也会发生这种情况。然后,您需要确保type_info在-frtti代码中访问的任何类都使用其密钥方法进行编译-frtti。当您创建类的对象,使用dynamic_cast等时,可能会发生此类访问。

白衣染霜花

当声明的(非纯)虚函数缺少实体时会发生这种情况。在您的类定义中,类似于:virtual void foo();应该定义(内联或链接的源文件):virtual void foo() {}或者声明纯虚拟:virtual void foo() = 0;
随时随地看视频慕课网APP
我要回答