C++ 关于vtable fo xxx 的报错问题解决

文章讲述了在构建开源库为动态库时遇到的undefinedsymbolvtableforxxx错误,该问题由缺少头文件导致。通过修改CMake的Makefile,将头文件添加到动态库的构建命令中解决了问题。同时提到了其他可能的原因,如虚函数未实现、析构函数缺失实现,以及可能与Qt的Q_OBJECT宏相关的问题。
摘要由CSDN通过智能技术生成

问题描述

最近在对一个开源库进行打包生成动态库的过程中遇到了问题。

在将打包好的动态库使用到项目开发中时,运行报错显示"undefined symbol vtable for xxx"

解决办法

经过排查,我发现这个问题是由于动态库中找不到头文件 test.h 引起的。

通过修改 CMake 生成的 Makefile 文件,将动态库中加入了 test.h 文件,以便在使用的时候能够正常调用它。

具体而言,原先生成动态库的命令是这样写的:

add_library(demo ${SRC})

将其修改为:

add_library(demo ${SRC} test.h)

这样就能够解决 undefined symbol vtable for xxx 错误了。

其他问题

当时在排查问题的时候也找到了很多可能的原因:

  1. 头文件中类的虚函数没有被实现

    解决方法是对类的虚函数加上 { } 进行实现。

  2. 如果该类为子类,也可能是父类的虚函数没有被实现

    解决方法是将父类的虚函数加上 { } 进行实现

  3. 类中有析构函数的声明,但是没有实现

    解决方法是在析构函数后面加上 { }

  4. 还有可能是使用了Qt中的Q_Object

    但是这一点我没有找到明确的解决方法,所以我就按照我上面的方法进行了尝试,然后解决了

参考博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值