我们为VS2005编译了QT 4.6和QWT 5.2.0.
我们试图从QwtDial派生一个类,派生类有插槽.所以,我们需要添加Q_OBJECT宏.但是,当我们这样做时,链接器会清除此错误:
错误LNK2001:未解析的外部符号"public:static struct QMetaObject const QwtDial :: staticMetaObject"(?staticMetaObject @ QwtDial @@ 2UQMetaObject @@ B)
我用依赖查看了Qwt.dll,它有这个功能.使用十六进制编辑器查看.lib文件显示它与该名称损坏的字符串完全匹配.
我们在路径中有Qwt lib.实际上,如果我重命名lib,那么它会给出一个无法找到lib文件的错误.所以,我们知道它正在寻找正确的lib.
如果我们跳过Q_OBJECT,那么所有内容都使用几个QWT小部件链接和绘制,包括我们的非Q_OBJECT Qwt派生类.
有谁知道什么会导致这个真正烦人的链接器问题?
更新:
我已经验证了我添加Q_OBJECT的类肯定是为它生成了一个MOC文件.链接器错误实际上来自此生成的MOC文件:
moc_GaugeWidget1.obj : error LNK2001: unresolved external symbol "public: static
struct QMetaObject const QwtDial::staticMetaObject"
(?staticMetaObject@QwtDial@@2UQMetaObject@@B)
Run Code Online (Sandbox Code Playgroud)
所以,它看起来像是一种非常典型的东西.符号肯定在lib中.