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

Posted lovebay

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vs2010+qt4编译出现error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject等错误相关的知识,希望对你有一定的参考价值。

1、当vs2010编译qt时会出现以下错误:

           1>------ 已启动全部重新生成: 项目: MyDialog, 配置: Debug Win32 ------
           1>生成启动时间为 2015/9/9 14:57:04。
           1>InitializeBuildStatus:
           1>  正在创建“DebugMyDialog.unsuccessfulbuild”,因为已指定“AlwaysCreate”。
           1>CustomBuild:
           1>  Moc‘ing LoginDlg.h...
           1>ClCompile:
           1>  LoginDlg.cpp
           1>  main.cpp
           1>  正在生成代码...
           1>LoginDlg.obj : error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __thiscall CLoginDlg::metaObject(void)const " (?         [email protected]@@[email protected]@XZ)
           1>LoginDlg.obj : error LNK2001: 无法解析的外部符号 "public: virtual void * __thiscall CLoginDlg::qt_metacast(char const *)" ([email protected]@@[email protected])
           1>LoginDlg.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __thiscall CLoginDlg::qt_metacall(enum QMetaObject::Call,int,void * *)" ([email protected]@@[email protected]@@[email protected])
           1>D:VC++QtTMyDialog\\MyDialog.exe : fatal error LNK1120: 3 个无法解析的外部命令
           1>
           1>生成失败。
           1>
           1>已用时间 00:00:03.23
            ========== 全部重新生成: 成功 0 个,失败 1 个,跳过 0 个 ==========

2、出现以上错误的原因是由于在GeneratedFiles/Debug文件中缺少一个moc_XXX.cpp文件,如下图所示:

技术分享图片

 

3、缺少的文件名是什么呢?那么首先要找到Q_OBJECT宏在那个头文件中,比如在上图中该宏在LoginDlg.h文件中,那么生成的文件时moc_LoginDlg.cpp,要生成此文件需要qt库中的一个moc.exe文件,如下图所示:

 技术分享图片

4、通过cmd进入到此目录中,然后执行:moc "D:VC++QtTMyDialogMyDialogLoginDlg.h" -o "D:VC++QtTMyDialogMyDialogmoc_LoginDlg.cpp"

如下图所示:

 技术分享图片

5、然后会在D:VC++QtTMyDialogMyDialog目录生成一个moc_LoginDlg.cpp文件,如下图所示:

 技术分享图片

 

6、将moc_LoginDlg.cpp文件拷贝到GeneratedFiles/Debug目录中,并在vs中添加该文件,如下图所示:

 技术分享图片

 

7、重新编译即可

 



















以上是关于vs2010+qt4编译出现error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject等错误的主要内容,如果未能解决你的问题,请参考以下文章

转载:LINK:fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

vs2010程序运行出错 link : fatal error lnk1123: 转换到 coff 期间失败: 文件无效或损坏

VS2010 fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 嵌入清单

vs2015编译ffmpeg 出现错误rtmp.lib(rtmp.obj) : error LNK2001: 无法解析的外部符号 ___iob_func

亲测VS2010纯静态编译QT4.8.0,实现VS2010编译调试Qt程序,QtCreator静态发布程序(图文并茂,非常详细)

vs2010 LINK : fatal error LNK1123: 转换到 COFF 期间失败:(cc)