error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __thiscall
在编写QT的程序时遇到该问题,可以参考的调查方向有两个
- Q_OBJECT宏
- 信号与槽的连接方式不正确
Qt在编译之前,首先要使用moc分析C++文件,如果文件中包含了Q_OBJECT宏,则会生成在原文件名钱添加moc_的新文件,该文件将进入编译系统,最终链接到二进制代码中。参考moc文件的生成方法。本次遇到的该问题是相关的头文件没有加入工程中,导致编译没有生成moc文件,经过手动将文件加入工程之后,编译OK。
手动添加前
HEADERS += \
src/TCPLink.h \
手动添加后
HEADERS += \
src/TCPLink.h
附:Error LNK2001 无法解析的外部符号 的几种情况及解决办法
Cannot retrieve debugging output
Qt编译运行一个没有问题,两个工程同时运行则会出现该问题。
QAbstractSocket::waitForBytesWritten() is not allowed in UnconnectedState
error: C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
两个头文件相关包含所致。a.h包含了b.h,同时b.h包含了a.h
error: LNK2019: 无法解析的外部符号
出现该问题是由于工程中包含了不识别的库文件。
相关的实现.h和.cpp没有加入工程
LNK2019问题出现的原因
error: C2039: “staticMetaObject”: 不是XXXX的成员
在Qt声明开始之前,添加Q_OBJECT,类中需要继承QObject,如果存在其他的继承,那么需要进行多种继承,且QO别处他需要放在前面。
C2143: 语法错误 : 缺少“;”(在“‘template<’”的前面)
出现这种问题在头文件中查找问题的原因。在本次我这边出现的原因是定义class的尾部没有添加;号
QThread: Destroyed while thread is still running
vs编译出现未加载 wntdll.pdb
C++中调用Python脚本提示 error LNK2001: 无法解析的外部符号__imp_PyString_FromString等错误的解决方案
出现该错误的原因是Python是64位的,VS编译选择的却是32位的,解决时,可以设置VS编译为64位,相关实践请参考下面的链接。
解决方法
Qt 运行出现Executable dm_01.exe does not exist
第一步:检查编译是否成功
第二步:确认编译的输出路径
第三步:检查qtcreator 工程设置里项目运行的位置是否和编译输出路径相同。