专栏首页along的开发之旅NDK开发之 Undefined Reference to Typeinfo

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 由一个stack OOM引发的血案

    内存溢出(OOM)了?是啊,明明白白写着“java.lang.OutOfMemoryError”。然而,有没有注意到错误信息里都有关于stack字样?对,这是由...

    望天
  • Android逆向分析概述

    学习逆向的初衷是想系统学习Android下的hook技术和工具, 想系统学习Android的hook技术和工具是因为Android移动性能实战这本书. 这本书里...

    望天
  • Android逆向分析从入门到深入

    学习逆向的初衷是想系统学习Android下的hook技术和工具, 想系统学习Android的hook技术和工具是因为Android移动性能实战这本书. 这本书里...

    望天
  • 算法创作|力扣题—返回不重复字符的最长字串长度

    所以在一串给定得字符串中,通过循环的方式让后面和前面的字符进行对比。对于无顺序比较,这里我们采用set()函数,无序不重复元素集,可进行关系测试,删除重复数据,...

    算法与编程之美
  • Qt中常见的错误

    valueChanged()函数有两个重载,那么我们在使用这个信号的时候就需要使用一个函数指针明确的指向其中一个函数。例如:

    zy010101
  • php实现在线考试系统【附源码】

    说明:本篇文章是为了记录下学习开发思路,程序不具备商业价值,明白开发思路,商用需二次升级!

    砸漏
  • 链接时无法解析符号checklist

    主要原因包括四类:函数声明与实现的原型不一致、函数声明与实现的作用域不同、函数声明但没有实现、使用DLL接口不当。

    gaigai
  • Python3.7安装pyaudio教程解析

    因为 pyaudio 暂时不支持 python3.7 和 3.8,所以若需要安装 pyaudio 需要下载 whl 文件后再离线进行安装。

    砸漏
  • GitHub敏感信息扫描工具

    功能设计说明 GitPrey是根据企业关键词进行项目检索以及相应敏感文件和敏感文件内容扫描的工具,其设计思路如下: 根据关键词在GitHub中进行全局代码内容和...

    用户1467662
  • 【一天一大 lee】使用最小花费爬楼梯 (难度:简单) - Day20201221

    数组的每个索引作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i] ,(索引从 0 开始)。

    前端小书童

扫码关注云+社区

领取腾讯云代金券