我是靠谱客的博主 纯情摩托,最近开发中收集的这篇文章主要介绍NDK开发之 Undefined Reference to Typeinfo,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最近给现在代码增加个功能,可以使用代理走向内网指定服务器,但是功能增加后一直编译不过,报错:"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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部