我们已经为 VS2005 编译了 QT 4.6 和 QWT 5.2.0。
我们试图从 QwtDial 派生一个类,而派生类有插槽。所以,我们需要添加 Q_OBJECT 宏。但是,当我们这样做时,链接器会消除此错误:
错误 LNK2001:未解析的外部符号“公共:静态结构 QMetaObject const QwtDial::staticMetaObject”(?staticMetaObject@QwtDial@@2UQMetaObject@@B)
我用depends查看了Qwt.dll,它具有该功能。使用十六进制编辑器查看 .lib 文件显示它与该名称损坏的字符串完全匹配。
我们在路径中有 Qwt 库。实际上,如果我重命名 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)
所以,它看起来像一些非常奇怪和非典型的东西。该符号肯定在库中。