error LNK2001: 无法解析的外部符号 Qt的moc机制

转载 2017年09月16日 16:27:54

先转一下其他人的帖,同样是error LNK2001的问题。

第一次来发个帖,如果可能的话期望找到根本原因!

几天没有关注我的QT程序,再次拿出来编译后竟然出现连接错误,因为四体不勤,没有频繁的checkin,所以无法找到中间版本,只能解决问题了。

1>MainWindowBottomWidget.obj : error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __thiscall

MainWindowBottomWidget::metaObject(void)const " ()
1>MainWindowBottomWidget.obj : error LNK2001: 无法解析的外部符号 "public: virtual void * __thiscall MainWindowBottomWidget::qt_metacast

(char const *)" ()
1>MainWindowBottomWidget.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __thiscall MainWindowBottomWidget::qt_metacall(enum

QMetaObject::Call,int,void * *)" ()

问题原因:没有找到根本原因,据说是链接时无法找到对应的moc文件。
VS2008问题解决方法:在对应的cpp文件的末尾加上#include "moc_MainWindowBottomWidget.cpp"(文件名根据实际情况修改)


原因:
1. 是否加上了Q_OBJECT宏?
2. 你的widget里用到signal slot了吧?(也许是后续加的)
3. 类定义在cpp里了? 没有相应的.h文件?
4. 如果以前没信号槽新加的, 那么makefile需要重新生成。

如果用到信号槽但类的定义没有放在.h文件中, qmake不会自动调moc, 你就需要写#include "moc_MainWindowBottomWidget.cpp"告诉qmake你有文件需要

moc

在visual studio中,如果是接下来添加的Q_OBJECT宏、信号函数、槽函数等,由于之前编译过程中没有生成moc文件,或者该moc文件已被删除,那么新添加

后,visual studio就不会再生成moc文件了,这就导致visual studio在链接时出现以上情况的Error。

我总结的原因如下:

vs在编译时会产生一系列的命令以控制该.h、.cpp文件的编译过程,并且,以后不会自动修改这些命令。

利用Qt编程时,写好.h、.cpp文件并第一次编译之后,若.h文件中定义类时没有添加Q_OBJECT宏以及信号函数、槽函数,VS编译命令中就没有moc命令,就不会调用Qt的moc工具以生成moc_*.cpp文件;并且即使添加了Q_OBJECT宏之后,VS也不会自动添加moc命令,因而不会生成moc文件。

VS在LINK时,找不到moc文件,就出现了error LNK2001的错误。

修改方法:

如果在.cpp文件的末尾添加#include "moc_MainWindowBottomWidget.cpp",确实可以解决error LNK2001的问题。但是,总有一种让人很不爽的感觉。我用以下的方法解决了这个问题:
1. 复制一份.h、.cpp文件并备份起来;
2. 在vs工区中移除并删除对应文件;
3. 新建两个空白文件,命名为*.h、*.cpp,再重新加载这两个文件至工程中;
4. 将备份中的.h、.cpp文件中的内容复制到新添加的*.h、*.cpp文件里;
5. 重新编译。


 

我没有解决,但是把pro文件重新导进去,没有问题了

Linux hotplug_uevent机制

-
  • 1970年01月01日 08:00

[QT] error LNK2001: 无法解析的外部符号 Qt的moc机制

先转一下其他人的帖,同样是error LNK2001的问题。 第一次来发个帖,如果可能的话期望找到根本原因! 几天没有关注我的QT程序,再次拿出来编译后竟然出现连接错误,因为四体不勤,没有频繁的c...
  • bbbbbbj
  • bbbbbbj
  • 2011-12-07 23:02:56
  • 1305

Qt LNK2005 LNK2001无法解析的外部符号

Qt中经常会出现LNK2005 LNK2001
  • zhang2010kang
  • zhang2010kang
  • 2014-04-30 20:28:02
  • 1171

Qt XXXr.obj : error LNK2001: 无法解析的外部符号 3 个无法解析的外部命令问题

VS没有将moc_XXX.cpp文件加入项目的Genarated Files的对应文件夹中。(这些文件已经生成了) 解决办法:VS资源管理器视图中选中项目Genarated Files文件夹下对应的...
  • hellofuturecyj
  • hellofuturecyj
  • 2015-08-05 23:26:34
  • 1689

QT+VS2008编译出现errorLNK2001:无法解析的外部符号

若出现如下错误: 错误 1 error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __thiscall Widge...
  • scut1135
  • scut1135
  • 2013-06-15 01:11:25
  • 2103

编译Qt时遇到”error LNK2001: 无法解析的外部符号“

解决办法:运行QT的命令行工具 From a command prompt, change the directory to hello, and type qmake -project to ...
  • china_daywalker
  • china_daywalker
  • 2012-04-13 13:39:29
  • 2342

QT中添加Q_OBJECT时编译提示obj : error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const错误解决方法

点击该.h右键文件属性,修改值如下: 命令行:"$(QTDIR)\bin\moc.exe"  "$(InputPath)" -o ".\GeneratedFiles\$(ConfigurationNa...
  • kxywn
  • kxywn
  • 2015-06-30 09:01:22
  • 2751

vs2010+qt4编译出现error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject等错误

1、当vs2010编译qt时会出现以下错误:            1>------ 已启动全部重新生成: 项目: MyDialog, 配置: Debug Win32 ------        ...
  • sunxiaoju
  • sunxiaoju
  • 2015-09-09 15:21:26
  • 5997

error LNK2001: 无法解析的外部符号 __imp__RegEnumKeyExA@32

错误: error LNK2001: 无法解析的外部符号 __imp__OpenProcessToken@12 error LNK2001: 无法解析的外部符号 __imp__LookupPrivil...
  • swanabin
  • swanabin
  • 2014-12-23 12:00:36
  • 4151

uafxcwd.lib(afxglobals.obj) : error LNK2001: 无法解析的外部符号 _IID_IWICImagingFactory

右键解决反案属性-> 连接器-> 输入->附加依赖项->编辑添加-〉windowscodecs.lib
  • apxar
  • apxar
  • 2013-10-13 18:23:11
  • 4077
收藏助手
不良信息举报
您举报文章:error LNK2001: 无法解析的外部符号 Qt的moc机制
举报原因:
原因补充:

(最多只允许输入30个字)