转载自:http://richardustc.github.io/blog/2013/07/undefined-reference-to-typeinfo/

在项目中遇到了这样一个问题:C++文件编译都OK,但链接的时候报错:undefined reference to `typeinfo for xxx’。typeinfo是C++中的RTTI(RunTime Type Identification)机制中记录类型信息用的,dynamic_cast和typeid操作符会使用这些信息。

以”undefined reference to typeinfo”为关键字在网络上搜索,大多数都是说有虚函数定义了但是未实现导致的。但是我的代码显然不是这个情况。在我即将放弃的时候,终于在StackOverflow上发现有人提出,这种错误的原因也可能是混合使用了带RTTI信息和不带RTTI信息的代码导致的。对比检查,发现我的项目里的问题正是这个。最后用了一点dirty hack,解决了bug。下面就仔细分析一下”undefined reference to `typeinfo for xxx’“产生的原因。

虚函数未实现

产生”undefined reference to `typeinfo for xxx’“最常见的原因就是基类的虚函数未实现了。由于C++类的实现可以分布在多个源文件中,所以生成目标文件时,基类的虚函数没有定义是不会报错的。但是链接成可执行文件时,需要将虚函数的信息放进typeinfo中,这个时候虚函数未实现就会引发这个错误。

混用了no-RTTI代码和RTTI代码

我碰到的正是混用了no-RTTI和RTTI代码的情形。项目中我们自己写的程序必须开启RTTI,而我们使用的外部的一个库使用no-RTTI编译。我们在自己的代码中需要重载一个外部库中的带虚函数的类,结果链接的时候就出现了问题。外部库中的基类使用-fno-rtti选项编译,生成的代码没有typeinfo信息,而我们的代码使用-frtti选项编译,要求基类必须要有typeinfo信息。最后,我在编译系统中做了一些dirty hack,让那个派生类所在的源文件以-fno-rtti选项编译,解决了问题。

----------------------------------------------------------------

我遇到的问题类似,现在的项目中需要开启RTTI,链接的外部库是no-RTTI编译的,在现在的工程中重载外部库的带虚函数的类,连接的时候报错.原文说的dirty hack,是对单个文件加编译选项-fno-rtti 。因为我用的外部库是可以开启RTTI的,我用RTTI重新编译一次后,现在的工程不报错啦。

Undefined Reference to Typeinfo相关推荐

  1. error: undefined reference to ‘typeinfo for android::RefBase‘ hidl_death_recipient

    HIDL设置死亡通知时出现错误: typeinfo for android::hardware::hidl_death_recipient: error: undefined reference to ...

  2. undefined reference to 'typeinfo for android::Thread'

    原因:工程使用了系统库libstagefright.so,而该库是Android系统用no-rtti方式编译出来的,因此我们的工程也必须要用no-rtti方式编译. 解决方法:在Application ...

  3. C++:undefined reference to vtable 原因与解决办法 [转]

    最近在写一套基础类库用于SG解包blob字段统计,在写完了所有程序编译时遇到一个郁闷无比的错误:  MailBox.o(.text+0x124): In function `CMailBox::CMa ...

  4. undefined reference to 'pthread_create'问题解决(转)

    undefined reference to 'pthread_create' undefined reference to 'pthread_join' 问题原因:     pthread 库不是 ...

  5. undefined reference to `libiconv_open 无法编译PHP libiconv

    原文:http://hi.baidu.com/ostech/blog/item/a63f9b0dabed1ae7ab6457d0.html ./configure --with-mysql=/back ...

  6. 【Qt】error: undefined reference to `vtable for MainWindow‘

    1.问题描述 在写一个demo时,想尽量简单,就把MainWindow类的定义和实现都写在main.cpp中,结果编译时报错: main.cpp:-1: error: undefined refere ...

  7. 【Qt】报错error: undefined reference to `vtable for的解决方法

    1.问题描述 编译Qt程序时,在某个类构造函数定义处报错: error: undefined reference to `vtable for 2.原因分析 导致错误信息的原因是:子类没有实现父类的纯 ...

  8. 【ffmpeg】编译时报错:error: undefined reference to `av...

    1.问题描述 昨天使用ffmpeg库编译demo一切正常,今天再次链接ffmpeg库时报了一堆错误: error: undefined reference to `av_frame_alloc()' ...

  9. undefined reference to android log print,undefined reference to '__android_log_print'

    场景:undefined reference to `android_log_print' undefined reference to `__android_log_print' 原因:没有加入支持 ...

最新文章

  1. 马斯克放话:6个月内公测卫星互联网!颠覆5G的将不是6G
  2. Jupyter notebook 运行环境创建和切换 (Win10+Anaconda)
  3. android 中的常用组件
  4. [SpringMVC]定义多个前缀映射的问题
  5. ibatise 没有大于等于吗_农村房屋没有证等于违法建筑吗?下面三个时间点记住,小心被忽悠...
  6. 利用爬虫模拟网页微信wechat
  7. 【云周刊】第205期:阿里云重磅开源实时计算平台Blink,挑战计算领域的“珠峰”...
  8. 《软件项目管理(第二版)》第 10 章——项目收尾 重点部分总结
  9. LiteOS内核源码分析:动态内存之Bestfit分配算法
  10. 三星Galaxy S22系列发布会准确时间曝光:2月9日正式揭晓
  11. c语言入门函数大全,C语言函数大全(适合初学者).doc
  12. 看完豁然开朗!mysql集群搭建linux
  13. 4个常用的计算机应用软件,信息技术应用--常用计算机工具软件4常用工具软件单元四.pdf...
  14. HDU 5009 Paint Pearls
  15. Lingo软件入门【数学建模】
  16. centos7构建kylo-0.10.1
  17. 【PTA】7-9 句子首字母变大写(python)
  18. img居中以及等比缩放
  19. 教师资格综合素质知识要点记录
  20. 原创【歌词类】雪中吟

热门文章

  1. 2021HDU多校8 - 7059 Counting Stars(线段树)
  2. 牛客多校3 - Operating on a Graph(并查集+链表合并)
  3. 牛客 - Across the Firewall(最大流)
  4. CodeForces - 123B Squares(简单几何+旋转坐标系)
  5. 洛谷 - P2754 [CTSC1999]家园(最大流+并查集)
  6. 倾斜模型精细化处理_万能三维模型修复神奇——模方
  7. python两数求和_Python两数相加实现
  8. 1066. 图像过滤(15)
  9. python3爬虫(7)反反爬虫解决方案
  10. 利用 AVDictionary 配置参数