未解析的外部符号:QMetaObject const QwtPlotMagnifier::staticMetaObject
Unresolved external symbol: QMetaObject const QwtPlotMagnifier::staticMetaObject
我有一个使用 QwtPlotMagnifier 和其他 Qwt 类 的库。我决定将 QwtPlotMagnifier 子类化,以便在重新缩放绘图时发出信号。
库 (mylib.lib) 编译,但使用它的应用程序现在抱怨与 QwtPlotMagnifier 的 moc 输出相关的未解析外部。
我正在静态链接 qwt;因此在最低级别库中使用预处理器指令 QWT_DLL 的要求在这里不适用。
错误如下(子类名为PlotMagnifier):
mylib.lib(moc_PlotMagnifier.obj) : error LNK2001: unresolved external symbol "public: static struct QMetaObject const QwtPlotMagnifier::staticMetaObject" (?staticMetaObject@QwtPlotMagnifier@@2UQMetaObject@@B)
子类声明没有什么特别之处:
#pragma once
#include "qwt_plot_magnifier.h"
/**
subclass of QwtPlotMagnifier to provide a signal when zooming is complete
*/
class PlotMagnifier : public QwtPlotMagnifier
{
Q_OBJECT
public:
explicit PlotMagnifier(QWidget *w);
virtual ~PlotMagnifier();
signals:
void rescaled();
protected:
virtual void rescale(double factor);
};
我在 visual studio 2013 年初。我的应用程序仍然像往常一样包含 qwtd.lib。这对我来说一定是一个愚蠢的错误..请启动我的大脑,某人!
将此行添加到 .pro 文件以向编译器提示外部符号:
DEFINES += QWT_DLL
文件中 qwt_global.h
有宏。如果没有这个宏,编译器会认为这是一个内部符号。
检查一下,如果您的 Visual Studio 项目中包含所有需要的内容。
C/C++ / Additional Include Directories
这里应该是 <qwt_dir\include>
的路径
Linker / General / Additional Library Directories
这里应该是 <qwt_dir\lib>
的路径
Linker / Input
应包括 qwtd.lib
(对于 debug
配置)和 qwt.lib
(对于 release
)
此外,请检查您在 Release
和 Debug
配置中是否有这些条目,在进行 Release
配置时,仅配置 Debug
很容易。
此外,请检查项目视图中 Generated Files
下的 PlotMagnifier
是否有 moc_*
文件(类似于 moc_plotmagnifier.cpp
),有时 Qt 插件无法添加他们。
我有一个使用 QwtPlotMagnifier 和其他 Qwt 类 的库。我决定将 QwtPlotMagnifier 子类化,以便在重新缩放绘图时发出信号。 库 (mylib.lib) 编译,但使用它的应用程序现在抱怨与 QwtPlotMagnifier 的 moc 输出相关的未解析外部。
我正在静态链接 qwt;因此在最低级别库中使用预处理器指令 QWT_DLL 的要求在这里不适用。
错误如下(子类名为PlotMagnifier):
mylib.lib(moc_PlotMagnifier.obj) : error LNK2001: unresolved external symbol "public: static struct QMetaObject const QwtPlotMagnifier::staticMetaObject" (?staticMetaObject@QwtPlotMagnifier@@2UQMetaObject@@B)
子类声明没有什么特别之处:
#pragma once
#include "qwt_plot_magnifier.h"
/**
subclass of QwtPlotMagnifier to provide a signal when zooming is complete
*/
class PlotMagnifier : public QwtPlotMagnifier
{
Q_OBJECT
public:
explicit PlotMagnifier(QWidget *w);
virtual ~PlotMagnifier();
signals:
void rescaled();
protected:
virtual void rescale(double factor);
};
我在 visual studio 2013 年初。我的应用程序仍然像往常一样包含 qwtd.lib。这对我来说一定是一个愚蠢的错误..请启动我的大脑,某人!
将此行添加到 .pro 文件以向编译器提示外部符号:
DEFINES += QWT_DLL
文件中 qwt_global.h
有宏。如果没有这个宏,编译器会认为这是一个内部符号。
检查一下,如果您的 Visual Studio 项目中包含所有需要的内容。
C/C++ / Additional Include Directories
这里应该是 <qwt_dir\include>
的路径
Linker / General / Additional Library Directories
这里应该是 <qwt_dir\lib>
的路径
Linker / Input
应包括 qwtd.lib
(对于 debug
配置)和 qwt.lib
(对于 release
)
此外,请检查您在 Release
和 Debug
配置中是否有这些条目,在进行 Release
配置时,仅配置 Debug
很容易。
此外,请检查项目视图中 Generated Files
下的 PlotMagnifier
是否有 moc_*
文件(类似于 moc_plotmagnifier.cpp
),有时 Qt 插件无法添加他们。