无法构建quazip:moc编译器未识别相关类引发LNK2001链接错误
解决QuaZip在VS2012+Qt5.1下moc未生成及LNK2001错误
嘿,我一眼就瞅到你问题的关键了——moc是专门处理带Q_OBJECT宏的头文件的,不是源文件(.cpp)!你命令行里给的是quazipfile.cpp,这就是为啥moc提示"No relevant classes found"的原因,它在cpp文件里找不到需要处理的Q_OBJECT宏定义呀。下面给你一步步捋清楚解决办法:
1. 用moc正确生成文件
先找到quazipfile.h(就是那个包含QuaZipFile类和Q_OBJECT宏的头文件),然后执行正确的moc命令:
C:\Tools64\v2.0.6\Qt-5.1.0\bin\moc -o moc_quazipfile.cpp quazipfile.h
这下moc就能识别到头文件里的Q_OBJECT宏,生成完整的moc代码文件了。另外两个需要生成moc的类,也照着这个方法来,找到对应的头文件跑moc就行。
2. 把生成的moc文件加入VS项目
- 右键你的VS项目,选添加 -> 现有项,把刚才生成的
moc_quazipfile.cpp添加进去 - 另外两个moc文件也一样,全部加到项目里,这样编译的时候才会把它们编进去
3. 修复VS的Qt项目配置(省得下次还要手动搞)
既然VS没自动触发moc,大概率是Qt插件的配置有问题:
- 先确认你装了对应VS2012和Qt5.1的Qt Visual Studio Tools插件,没装的话赶紧补上
- 右键项目,打开Qt Project Settings,检查Qt版本是不是正确指向你那台机器上的Qt5.1.0路径
- 再看看头文件的构建规则:正常情况下,插件会自动给带Q_OBJECT的头文件配置Custom Build Tool,触发moc自动生成文件,要是没配的话,手动添加上也行
4. 清理后重新构建
最后一步,先清理掉之前编译的残留文件:点击VS菜单的生成 -> 清理解决方案,然后再选重新生成解决方案。
这样链接器报的unresolved external symbol staticMetaObject错误就应该消失了——这些符号本来就是moc生成的代码里定义的,之前没生成moc文件,自然找不到啦。
内容的提问来源于stack exchange,提问作者Rachel Gold
相关产品推荐
相关产品推荐

