Undefined Reference to Typeinfo
转载自: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相关推荐
- error: undefined reference to ‘typeinfo for android::RefBase‘ hidl_death_recipient
HIDL设置死亡通知时出现错误: typeinfo for android::hardware::hidl_death_recipient: error: undefined reference to ...
- undefined reference to 'typeinfo for android::Thread'
原因:工程使用了系统库libstagefright.so,而该库是Android系统用no-rtti方式编译出来的,因此我们的工程也必须要用no-rtti方式编译. 解决方法:在Application ...
- C++:undefined reference to vtable 原因与解决办法 [转]
最近在写一套基础类库用于SG解包blob字段统计,在写完了所有程序编译时遇到一个郁闷无比的错误: MailBox.o(.text+0x124): In function `CMailBox::CMa ...
- undefined reference to 'pthread_create'问题解决(转)
undefined reference to 'pthread_create' undefined reference to 'pthread_join' 问题原因: pthread 库不是 ...
- undefined reference to `libiconv_open 无法编译PHP libiconv
原文:http://hi.baidu.com/ostech/blog/item/a63f9b0dabed1ae7ab6457d0.html ./configure --with-mysql=/back ...
- 【Qt】error: undefined reference to `vtable for MainWindow‘
1.问题描述 在写一个demo时,想尽量简单,就把MainWindow类的定义和实现都写在main.cpp中,结果编译时报错: main.cpp:-1: error: undefined refere ...
- 【Qt】报错error: undefined reference to `vtable for的解决方法
1.问题描述 编译Qt程序时,在某个类构造函数定义处报错: error: undefined reference to `vtable for 2.原因分析 导致错误信息的原因是:子类没有实现父类的纯 ...
- 【ffmpeg】编译时报错:error: undefined reference to `av...
1.问题描述 昨天使用ffmpeg库编译demo一切正常,今天再次链接ffmpeg库时报了一堆错误: error: undefined reference to `av_frame_alloc()' ...
- undefined reference to android log print,undefined reference to '__android_log_print'
场景:undefined reference to `android_log_print' undefined reference to `__android_log_print' 原因:没有加入支持 ...
最新文章
- 马斯克放话:6个月内公测卫星互联网!颠覆5G的将不是6G
- Jupyter notebook 运行环境创建和切换 (Win10+Anaconda)
- android 中的常用组件
- [SpringMVC]定义多个前缀映射的问题
- ibatise 没有大于等于吗_农村房屋没有证等于违法建筑吗?下面三个时间点记住,小心被忽悠...
- 利用爬虫模拟网页微信wechat
- 【云周刊】第205期:阿里云重磅开源实时计算平台Blink,挑战计算领域的“珠峰”...
- 《软件项目管理(第二版)》第 10 章——项目收尾 重点部分总结
- LiteOS内核源码分析:动态内存之Bestfit分配算法
- 三星Galaxy S22系列发布会准确时间曝光:2月9日正式揭晓
- c语言入门函数大全,C语言函数大全(适合初学者).doc
- 看完豁然开朗!mysql集群搭建linux
- 4个常用的计算机应用软件,信息技术应用--常用计算机工具软件4常用工具软件单元四.pdf...
- HDU 5009 Paint Pearls
- Lingo软件入门【数学建模】
- centos7构建kylo-0.10.1
- 【PTA】7-9 句子首字母变大写(python)
- img居中以及等比缩放
- 教师资格综合素质知识要点记录
- 原创【歌词类】雪中吟
热门文章
- 2021HDU多校8 - 7059 Counting Stars(线段树)
- 牛客多校3 - Operating on a Graph(并查集+链表合并)
- 牛客 - Across the Firewall(最大流)
- CodeForces - 123B Squares(简单几何+旋转坐标系)
- 洛谷 - P2754 [CTSC1999]家园(最大流+并查集)
- 倾斜模型精细化处理_万能三维模型修复神奇——模方
- python两数求和_Python两数相加实现
- 1066. 图像过滤(15)
- python3爬虫(7)反反爬虫解决方案
- 利用 AVDictionary 配置参数