概述
最近给现在代码增加个功能,可以使用代理走向内网指定服务器,但是功能增加后一直编译不过,报错:"Undefined Reference to Typeinfo HttpClient", 很奇怪,代码看着没什么问题,就是编译不过。CPP最烦的就是不说人话。。。要让你去猜
查了网上的资料, 发生这种情况一般是 :
虚函数未实现
产生”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选项编译,解决了问题。
但是我的子类都实现了父类的方法,而且在添加之前编译也是没问题的,所以这两种都不是我的情况。
后来又将目光放到HttpClient中新增加的两行代码, 发现没有定义成纯虚函数,修改成纯虚函数即可。
修改前:
class HttpClient {
public:
virtual void setProxy(const char *proxy);
virtual void setProxyExtraHeader(const char *proxyExtraHeader);
};
修改后:
class HttpClient {
public:
virtual void setProxy(const char *proxy) = 0;
virtual void setProxyExtraHeader(const char *proxyExtraHeader) = 0;
};
参考
https://blog.csdn.net/ai2000ai/article/details/47152133
最后
以上就是纯情摩托为你收集整理的NDK开发之 Undefined Reference to Typeinfo的全部内容,希望文章能够帮你解决NDK开发之 Undefined Reference to Typeinfo所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复