QT4 error LNK2001: 无法解析的外部符号 .
2014-08-26 12:06
405 查看
命令行生成moc文件的方式:
cd C:/Qt/4.7.1/bin
moc .h文件群路径 -o 要生成的moc文件的全路径;
VS中不是用addin创建的项目,自动生成moc文件的设置:
在VS的解决方案管理器里面,右键需要生成moc文件的头文件-打开属性窗口;
常规-项类型,选择自定义生成工具;
关闭属性窗口重新打开,就出现了自定义生成工具选项;
自定义生成工具-常规:
命令行:"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"
输出:.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp
如果编译还有问题,在解决方案资源管理器里阿敏,右键生成的moc文件打开属性窗口;
配置属性-常规:设置下在debug和release下面分别设置下是否在项目中排除的属性;
然后我的措施:
1.移除[注意不是删除]ui文件,然后再添加进来,重新编译++++++
2.注意自定义的connect里面的slot函数的定义是否被删除掉了
cd C:/Qt/4.7.1/bin
moc .h文件群路径 -o 要生成的moc文件的全路径;
VS中不是用addin创建的项目,自动生成moc文件的设置:
在VS的解决方案管理器里面,右键需要生成moc文件的头文件-打开属性窗口;
常规-项类型,选择自定义生成工具;
关闭属性窗口重新打开,就出现了自定义生成工具选项;
自定义生成工具-常规:
命令行:"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"
输出:.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp
如果编译还有问题,在解决方案资源管理器里阿敏,右键生成的moc文件打开属性窗口;
配置属性-常规:设置下在debug和release下面分别设置下是否在项目中排除的属性;
先转一下其他人的帖,同样是error LNK2001的问题。 第一次来发个帖,如果可能的话期望找到根本原因! 几天没有关注我的QT程序,再次拿出来编译后竟然出现连接错误,因为四体不勤,没有频繁的checkin,所以无法找到中间版本,只能解决问题了。 1>MainWindowBottomWidget.obj : error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __thiscall MainWindowBottomWidget::metaObject(void)const " (?metaObject@MainWindowBottomWidget@@UBEPBUQMetaObject@@XZ) 1>MainWindowBottomWidget.obj : error LNK2001: 无法解析的外部符号 "public: virtual void * __thiscall MainWindowBottomWidget::qt_metacast (char const *)" (?qt_metacast@MainWindowBottomWidget@@UAEPAXPBD@Z) 1>MainWindowBottomWidget.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __thiscall MainWindowBottomWidget::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@MainWindowBottomWidget@@UAEHW4Call@QMetaObject@@HPAPAX@Z) 问题原因:没有找到根本原因,据说是链接时无法找到对应的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. 重新编译。 |
1.移除[注意不是删除]ui文件,然后再添加进来,重新编译++++++
2.注意自定义的connect里面的slot函数的定义是否被删除掉了
相关文章推荐
- Qt XXXr.obj : error LNK2001: 无法解析的外部符号 3 个无法解析的外部命令问题
- error LNK2001: 无法解析的外部符号 "public: virtual void * __thiscall LDRSUploadThread::qt_metacast(char const
- error LNK2001: 无法解析的外部符号 Qt的moc机制
- [QT] error LNK2001: 无法解析的外部符号 Qt的moc机制
- QT4 error LNK2001: 无法解析的外部符号
- QT + VS2005 编译出现 error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __thiscall Widget::metaObject 错误
- error LNK2001: 无法解析的外部符号 Qt的moc机制
- [QT] error LNK2001: 无法解析的外部符号 Qt的moc机制
- QT项目 新添类 出现 error LNK2001: 无法解析的外部符号
- QT中添加Q_OBJECT时编译提示obj : error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const错误解决方法
- [QT] error LNK2001: 无法解析的外部符号 Qt的moc机制
- QT编程中编译的时候出现c_jkdacx0.obj : error LNK2001: 无法解析的外部符号 "class QTextCodec * GlobalCodec" ?
- error LNK2001: 无法解析的外部符号 Qt的moc机制
- 编译Qt时遇到”error LNK2001: 无法解析的外部符号“
- LINK : error LNK2001: 无法解析的外部符号 _DllMainCRTStartup
- error LNK2001: 无法解析的外部符号 __GSHandlerCheck
- error LNK2001: 无法解析的外部符号
- Introduction error LNK2001: 无法解析的外部符号
- error LNK2001: 无法解析的外部符号 "public: virtual long __stdcall CBaseFilter
- error LNK2001: 无法解析的外部符号 "public: static class stdext::hash_map