VS2010下Qt导出动态库的编写
来源:互联网 发布:扎古头扭蛋可动眼编程 编辑:程序博客网 时间:2024/06/05 22:37
最近在做一个Qt的应用,遇到了DLL导出的问题。问了度娘,没有找到满意的答案。自己动手尝试了好久,结果成功了。把过程分享出来,供小伙伴们参考。
第一步:创建一个dll的工程,关键步骤如图:
应用程序类型选择“DLL”,附加选项选择“空项目”:
开始种植代码:
文件:myWidget.hpp#ifndef MYWIDGET_H#define MYWIDGET_H#include <QtGui/QWidget>//该头文件包含了Qt的导入导出宏#include <QtCore/qglobal.h>#定义导入导出宏的控制宏和自定义宏CWJ_EXPORT_DLL#ifdef CWJ_EXPORT# define CWJ_EXPORT_DLL Q_DECL_EXPORT#else# define CWJ_EXPORT_DLL Q_DECL_IMPORT#endifclass QPushButton;namespace cwj{ // 此处使用了自定义的导入导出宏CWJ_EXPORT_DLL class CWJ_EXPORT_DLL CMyWidget : public QWidget { Q_OBJECT public: explicit CMyWidget( QWidget * parent = 0, Qt::WindowFlags f = 0); ~CMyWidget(); private slots: void onBtnClick(); private: QPushButton *m_btn; };}#endif //MYWIDGET_H
文件myWidget.cpp实现和普通的类实现一样,不需要添加导入导出控制宏和自定义的宏,在此略去。
***********************************************************************************************************************************************************************************
种植完代码,接下来就是工程配置了。
首先,配置导入导出控制宏开关,在配置的时候,可以删除VS自动生成的"工程名_expor"t宏。如图:
接下来,使用配置头文件使用Qt的moc工具生成的自定义生成规则。
(说明:在配置自定义规则的时候,选择了“自定义生成工具”之后,再选择“应用”。这时才会切换到“常规”窗口)如图:
配置完毕之后,在文件上右键,选择“编译”,生成moc文件,然后将moc文件添加到工程中。
好了,最后就是附加库目录和包含文件目录的配置了,不会的请参考前一篇“环境搭建”的博文。
-------------------------------------------------------------------------------------华丽的分割线--------------------------------------------------------------------------------------
使用DLL:
MainWindow工程中的mainWindow.cpp文件源码如下:
#include <QtGui/QApplication>#include <QtGui/QMainWindow>//包含DLL的头文件#include "../Dll/myWidget.h"int main(int argc, char *argv[]){ QApplication app(argc, argv); QMainWindow m; //使用DLL中的类 cwj::CMyWidget myWidget(&m); m.setCentralWidget(&myWidget); m.show(); return app.exec();}
在主应用程序中配置预处理宏CWJ_EXPORT,配置附加的库目录,库文件:
此时编译MainWindow会在链接的时候报错,类似如下(XXXstaticMetaObjec(XXXX)无法解析标准的无法解析Q_OBJECT导致的错误):
1>Link:
1> 正在创建库 D:\My_Step\Qt\ForExportDll\Debug\MainWindow.lib 和对象D:\My_Step\Qt\ForExportDll\Debug\MainWindow.exp
1>mainWindow.obj : error LNK2001: 无法解析的外部符号"public: static struct QMetaObject constcwj::CMyWidget::staticMetaObject" (?staticMetaObject@CMyWidget@cwj@@2UQMetaObject@@B)
1>mainWindow.obj : error LNK2019: 无法解析的外部符号"public: __thiscall cwj::CMyWidget::CMyWidget(class QWidget *,classQFlags<enum Qt::WindowType>)"(??0CMyWidget@cwj@@QAE@PAVQWidget@@V?$QFlags@W4WindowType@Qt@@@@@Z),该符号在函数"public: void __thiscall cwj::CMyWidget::`default constructorclosure'(void)" (??_FCMyWidget@cwj@@QAEXXZ) 中被引用
1>mainWindow.obj : error LNK2019: 无法解析的外部符号"public: virtual __thiscall cwj::CMyWidget::~CMyWidget(void)"(??1CMyWidget@cwj@@UAE@XZ),该符号在函数 _main 中被引用
1>D:\My_Step\Qt\ForExportDll\Debug\MainWindow.exe: fatal error LNK1120: 3 个无法解析的外部命令
原因是:MainWindow中无法解析dll的头文件中Q_OBJECT宏导致的错误。解决办法:将dll工程的moc文件添加到MainWindow工程中。
如图:
OK,运行结果如下:
- VS2010下Qt导出动态库的编写
- (备忘)vs2010编写动态链接库时导出函数的函数名问题及加载方式
- vs2010下动态库的编写以及链接(我是新手,浅谈!a)
- Qt creater5.5.1+win环境下加载vs2010编译的动态库
- vs2010编写mfc动态库
- 图解如何使用VS2010和Qt导出和使用静态库,动态库
- 图解如何使用VS2010和Qt导出和使用静态库,动态库
- 图解如何使用VS2010和Qt导出和使用静态库,动态库
- 图解如何使用VS2010和Qt导出和使用静态库,动态库
- 图解如何使用VS2010和Qt导出和使用静态库,动态库
- 图解如何使用VS2010和Qt导出和使用静态库,动态库
- VS2010 如何查看动态链接库的导出函数
- vs2010中动态链接库的编写和调用
- vs2010下qt的intellisense
- Qt下怎样使用和编写动态链接库
- QT学习编写动态库
- C++动态库的编写与类的导出
- 编写MFC的扩展动态库导出类
- 五、畸变矫正—让世界不在扭曲
- 颈椎 肩膀痛 胸部酸痛 生活中治疗调整----健康
- 1063冒泡排序
- 灰度图像--图像增强 锐化基础
- Leetcode——Unique Paths
- VS2010下Qt导出动态库的编写
- ios-------------UITextField控件详解
- Perl 列表框
- 揭谭咏麟原配夫人出家为尼背后隐情(图)
- JSON.stringfy
- 形态学及其他集合运算(Morphological and Other Set Operations)
- 毕业设计-微信公众平台开发与设计(一:准备材料)
- android学习记录(十)SQLiteOpenHelper简单解析。
- 【Distribution】Java RMI - 1 - 原理简介