Qt/VS LNK2019/LNK2001:无法解析的外部符号

LNK2019

  • 序言
  • LNK2019:无法解析的外部符号"__declspec
  • LNK2019:无法解析的外部符号" public private函数名
    • 1、有函数声明忘写定义
    • 2、有种可能性是处于不同目录下去调用那个对应的文件接口
    • 3、有种可能性,是因为跨类调用了inline函数
    • 4、Q_OBJECT写了,但是报错
  • LNK2001 无法解析的外部符号 "public: virtual struct QMetaObject const
  • LNK2019:无法解析的外部符号"public: static
  • LNK2019: 无法解析的外部符号"public_cdecl...
  • 以上都不行时
  • C1083 无法打开编译器生成的文件:"....moc_...obj"

序言

这节是我平时遇到的恶心的无法解析的外部符号LNK2019所指明的可能性和解决方向。

LNK2019:无法解析的外部符号"__declspec

以这种为前缀的基本上跟库相关的,说明无法正常调用库,一般是路径有问题,在属性上需要校准好;

C/C++ ->常规 -> 附加包含目录 -> 写库目录 …/bb
链接器 -> 输入 -> 附加依赖性 -> 写库的lib路径 …/bb/testlib.lib

.

LNK2019:无法解析的外部符号" public private函数名

1、有函数声明忘写定义

很大概率是你在头文件声明了函数,但是没有写对应的定义
.

2、有种可能性是处于不同目录下去调用那个对应的文件接口

C/C++ ->常规 -> 附加包含目录

在这里写下对应文件的路径即可。
.

3、有种可能性,是因为跨类调用了inline函数

去掉inline,正常调用就可以了。
.

4、Q_OBJECT写了,但是报错

在VS上运行的,但是Qt没事的情况下,只需要加上#include 即可,写了也没用,可以重新构成/qmake一下,然后叉掉IDE再打开
.

LNK2001 无法解析的外部符号 "public: virtual struct QMetaObject const

在VS上运行的,但是Qt没事的情况下,只需要加上#include 即可
.

LNK2019:无法解析的外部符号"public: static

很大概率是调用了另一个pri/pro的文件,导致无法正常找到对应函数
.

LNK2019: 无法解析的外部符号"public_cdecl…

用下面的方法即可,没更新过来而已
.

以上都不行时

qmake/重新生成一下,然后叉掉IDE再打开
.

C1083 无法打开编译器生成的文件:“…moc_…obj”

两个类同名了,无法分辨,换一个名字就行
.

上述的都不行,可以看看这个微软官方的报错文档

你可能感兴趣的:(IDE使用,qt,vs)