error LNK2019: 无法解析的外部符号 "public: __cdeclXX(void)" (??0C@@QEAA@XZ),该符号在函数 main 中被引用

1、问题:

最近使用QT 5.9.5 设计界面,遇到一个纠结的问题:

建立工程后,再新建一个新的类(如class a),类声明在a.h头文件中,在main.cpp中 #include “a.h” 但是在链接过程中报错:类a的所有成员函数(构造函数,析构函数等)均无法识别,被编译器标为“无法解析的外部符号”。

解决:

将当前qt工程所在的父目录下的 build-(工程名)-Desktop_Qt_5_9_5_MSVC2017_64bit-Debug 文件夹删除,再构建项目即可运行。。

只能说qt5的编译器过于奇葩。。

2、问题:

在qt中使用了#include <QtMultimedia/QAudioInput> 实现录音功能,但是发现所有使用QtMultimedia中的类的成员函数均被判为:error LNK2019: 无法解析的外部符号 “__declspec(dllimport),使用上一种方法无法解决。

解决:

查了网上的一些资料,发现链接错误是由于最后在生成可执行程序时无法找到某个库所造成的,即程序编译是没有问题的,例如你的代码里面声名了一个函数,然后也有很多地方用到了这个函数,但是这个函数真正的实现是在某个你引用的库里面实现,定义的,因此,在编译阶段是不会报错的,但等到真正链接时,就要去打这个函数的实现了,此时,如果编译器找不到对应的库文件(win下一般为.lib谁的),就会报这种链接错误了。

所以真正的问题是没有加载库

加载库的方法有两种:

1)在qt的工程文件.pro中添加:QT += multimedia (库名)

2)向项目添加对应的lib文件

我使用1)解决了问题。

原文:Qt5 error LNK2019 无法解析的外部符号 解决办法