最近在项目中需要用到一些属性框, 因为整个程序是用qt写的, 所以在aol.com(为啥不是google, 你懂的)一番后, 锁定了 qt-solutions 这个开源组件.
本以为一切都很顺利, 但还是发生了一些问题.
因为我只想用其中的QtPropertyBrowser这个组件, 所以就只把这部分的源码添加到了项目中, 但一编译就是一堆的错误:
...........
1>qtvariantproperty.obj : error LNK2001: 无法解析的外部符号 "public: static struct QMetaObject const QtRectPropertyManager::staticMetaObject" ([email protected]@@[email protected]@B)
1>qtvariantproperty.obj : error LNK2001: 无法解析的外部符号 "public: static struct QMetaObject const QtRectFPropertyManager::staticMetaObject" ([email protected]@@[email protected]@B)
1>qtvariantproperty.obj : error LNK2001: 无法解析的外部符号 "public: static struct QMetaObject const QtColorPropertyManager::staticMetaObject" ([email protected]@@[email protected]@B)
1>qtvariantproperty.obj : error LNK2001: 无法解析的外部符号 "public: static struct QMetaObject const QtSizePolicyPropertyManager::staticMetaObject" ([email protected]@@[email protected]@B)
1>qtvariantproperty.obj : error LNK2001: 无法解析的外部符号 "public: static struct QMetaObject const QtFontPropertyManager::staticMetaObject" ([email protected]@@[email protected]@B)
1>qtvariantproperty.obj : error LNK2001: 无法解析的外部符号 "public: static struct QMetaObject const QtCursorPropertyManager::staticMetaObject" ([email protected]@@[email protected]@B)
1>qtvariantproperty.obj : error LNK2001: 无法解析的外部符号 "public: static struct QMetaObject const QtFlagPropertyManager::staticMetaObject" ([email protected]@@[email protected]@B)
1>D:\Other\proj\earthmaker\Win32\Debug\EarthMaker.exe : fatal error LNK1120: 161 个无法解析的外部命令
看着应该是很简单的链接错误, 但因为我是把源码直接添加到项目中的, 而上面这个提示一般都是在引入三方库时才会出现的, 所以依然是到aol.com上搜索.
所有的搜索结果总结一下主要是下面几个原因导致的:
- 没找到你要链接的库 (这种很简单, 指定一下库的路径, 一般都OK)
- 没生成或没找到moc_*.cpp文件 (也比较简单, 在cpp的末尾添加上 #include "moc_xxx.cpp", 你别说 qtpropertybrowser 这个库就是这么干的
- 文件是unicode的, 需要随便修改一下, 再保存就ok了
遗憾的是, 以上几种我试过之后都没解决我的问题, 在困扰了我几天之后, 不经意的瞎点中发现了这个:
而一般cpp文件的常规应该是这样:
所以果断把qtpropertybrowser中所有的cpp的属性页都修改成 "C/C++编译器", 编译, 通过了!
visual studio和所有windows家的东西都是这样, 总是在时不时的给你来点小惊喜.......我快够了...
原文地址:http://segmentfault.com/a/1190000002498274
我有个文件还是 用的自定义生成工具
所以当你遇到这个问题的时候 确保 头文件和cpp文件都已经改完了。
真tm 操蛋 我也快够了