Undefined Reference to Typeinfo
来源:互联网 发布:手机动作特效软件 编辑:程序博客网 时间:2024/05/21 04:20
转载自: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
- Undefined Reference to Typeinfo
- Undefined Reference to Typeinfo
- undefined reference to typeinfo - C++ error message
- error: undefined reference to 'typeinfo for FileDialogDelegate'
- undefined reference to `typeinfo for QWidget'的解决
- error: undefined reference to 'typeinfo for android::MediaSource' 错误解决
- C++ 编译出现undefined reference to `vtable for Class 和 undefined reference to typeinfo for Class
- undefined reference to `typeinfo for IA' collect2: ld returned 1 exit status
- undefined reference to 'floor'/undefined reference to `&
- undefined reference to 'floor'/undefined reference to
- undefined undefined reference to `nfq_open'
- undefined reference to 'pthread_create'
- undefined reference to `_Unwind_Resume'
- undefined reference to `__ctype_b'
- undefined reference to rpl_malloc
- undefined reference to '__ctype_b'
- undefined reference to `__assert_fail'
- 我要娶你做我的CoreData!
- 通过ping测试网络连接
- 中文linux安装oracle界面乱码解决方案
- 源码推荐(6.16):高仿新浪微博,支付宝(高仿)源码
- HDU 1272 小希的迷宫 并查集
- Undefined Reference to Typeinfo
- VBA 里如何正确显示日语
- A*寻路算法C++简单实现
- 定时任务会重复执行俩次的解决方法
- 相邻div实现一个跟着另一个自适应高度示例代码
- 定时任务会重复执行俩次的解决方法
- Python3.4网页爬虫,提取图片
- 定时任务会重复执行俩次的解决方法
- LeetCode-4