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 ファイルを 16 進エディタで見ると、名前がマングルされた文字列と完全に一致することがわかります。
パスに Qwt lib があります。実際、lib の名前を変更すると、lib ファイルが見つからないというエラーが発生します。したがって、正しいライブラリを見ていることがわかります。
Q_OBJECT をスキップすると、非 Q_OBJECT Qwt 派生クラスを含むいくつかの QWT ウィジェットを使用して、すべてが正しくリンクおよび描画されます。
この本当に迷惑なリンカの問題を引き起こす原因を誰か知っていますか?
アップデート:
Q_OBJECT を追加したクラスが、確実にそのクラス用に生成された MOC ファイルを取得していることを確認しました。リンカー エラーは、実際にはこの生成された MOC ファイルから発生しています。
moc_GaugeWidget1.obj : error LNK2001: unresolved external symbol "public: static
struct QMetaObject const QwtDial::staticMetaObject"
(?staticMetaObject@QwtDial@@2UQMetaObject@@B)
そのため、非常に奇妙で非定型的なもののように見えます。シンボルは間違いなくライブラリにあります。