qwt 无法解析的外部符号 "public: static struct QMetaObject const QwtPlot::staticMetaObject

 

使用QWT例子oscilloscope出现如下错误:


error LNK2001: unresolved external symbol "public: static struct QMetaObject const QwtPlot::staticMetaObject" (?staticMetaObject@QwtPlot@@2UQMetaObject@@B)

本来这个例子在examples文件下直接QtCreator打开pro运行无错的。

当我转到VS项目里就无法编译通过,原来是Qwt在pri文件里定义了一个

win32 {
contains(QWT_CONFIG, QwtDll) {
DEFINES += QT_DLL QWT_DLL
}
}


所以在VS项目里,我们也需要设置一个预处理QWT_DLL。只有在预处理的时候定义了 QWT_DLL才能使用QWT的抛出类,否则就会出错!这个道理同样适用于我们自己生成的动态库,VS2008中的设置方法如下图所示:


具体方法:请看下面

------------------------------------转载------------------------------------------

在使用QWT进行二维曲线绘制,使用方法如下:

class Plot: public QwtPlot

{

Q_OBJECT

……

}

此时报错:error LNK2001: 无法解析的外部符号"public: static struct QMetaObject const QwtPlot::staticMetaObject"

出现这样的连接错误一般都是由于QwtPlot类的头文件中没有加Q_OBJECT而导致的,QwtPlot是QWT提供的类,怎么可能没有加Q_OBJECT宏呢?好吧,那就老老实实的跟踪打开QwtPlot类的头文件看看吧(没法查看QwtPlot的.cpp文件,应为QWT通过动态库的方式提供这些类的)

class QWT_EXPORT QwtPlot: public QFrame, public QwtPlotDict

{

Q_OBJECT

……

}

我晕!QwtPlot类加宏Q_OBJECT了,那为什么还会出现这个连接错误?这是什么原因?QWT已经是非常成熟的QT关于二维曲线绘制的开源框架了,也不可能会出现这样的低级错误。算了,换种使用方法试试吧:

class Plot: public QwtPlot

{

//Q_OBJECT

……

}

注销掉派生类中的Q_OBJEXT,疯了。居然编译通过了!这又是什么原因?OK!我已无能为力,还是交给高手吧!……!五分钟后,高手回复了(不愧是高手)!

由于预处理所带来的问题

QWT通过动态库抛出类的方式将类QwtPlot抛出供使用者使用,我们来看一下抛出地方时如何定义的(位于qwt_golbal.h):

#ifdef QWT_DLL

#if defined(QWT_MAKEDLL) // create a Qwt DLL library

#define QWT_EXPORT __declspec(dllexport)

#define QWT_TEMPLATEDLL

#else // use a Qwt DLL library

#define QWT_EXPORT __declspec(dllimport)

#endif

#endif // QWT_DLL

我们应该怎么理解上面这段代码呢?只有在预处理的时候定义了 QWT_DLL才能使用QWT的抛出类,否则就会出错!这个道理同样适用于我们自己生成的动态库,VS2008中的设置方法如下图所示:



至此问题解决

转自 http://qimo601.iteye.com/blog/1457211
  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值