<QT学习>QT生成与调用共享库

1.创建C++库

1.1点击New Project

  

 

 1.2选择库模板

  

   选择Library”中的”C++,再点击Choose”。

 

1.3选择共享库

  

   给共享库取个名称,并指定生成文件存放路径。再点击“下一步”。

 

1.4选择编译器

  

   再点击“下一步”。

 

1.5选择所需要的模块

  

   默认选择QtCoreQtCore模块提供核心的非图形用户接口功能,所有其他Qt模块都依赖于这个模块,如果您使用qmake来构建您的项目,则默认将QtCore包含在内)

相信,大部分人封装动态链接库的时候是不需要将界面封装的,只需要封装核心代码,故我们在此不选择QtGui。但如果需要将图形界面一起封装,就需要选择该项。

  再点击“下一步”。

 

1.6项目管理

  

   点击”完成“。

 

1.7点击项目,勾掉Shadow build,使.dll不生成在debug目录中,生成在我们自己创建的目录下面,方便查找和使用

 

1.8 .pro文件中,添加如下代码

  DESTDIR =..\MyDebug

  使生成的.dll文件放在该目录下,自动创建该目录。

  

 

1.9 点击运行,即可生成。(此弹框不用管它,代表编译成功,已生成文件)

  

注意:

  当创建完C++库的工程后, 可以看到QT自动生成了一个名为serial_global.h的文件。其中serial是我工程的名字。

#ifndef SERIAL_GLOBAL_H
#define SERIAL_GLOBAL_H

#include <QtCore/qglobal.h>

#if defined(SERIAL_LIBRARY)
#  define SERIALSHARED_EXPORT Q_DECL_EXPORT
#else
#  define SERIALSHARED_EXPORT Q_DECL_IMPORT
#endif

#endif // SERIAL_GLOBAL_H

  其中第6和第7行的意思如果定义了SERIAL_LIBRARY,SERIALSHARED_EXPORT定义为Q_DECL_EXPORT,否则定义为Q_DECL_IMPORT。这就是把对象导出的语句。

  SERIAL_LIBRARY在.pro中定义

 

   在对应的serial.h中可以看到

   在Serial前面就跟着SERIALSHARED_EXPORT。就相当于把Serial导出。所谓的导出,就是将其编译成一个dll文件后,其他的文件可以使用这个导出类。

  所以如果自己定义的函数不在类里面,就要单独的导出。    

   也可以用extern "C" { }把里面的函数全部包含进去。

 

2.调用C++库

2.1 手动添加

2.1.1在文件目录创建include目录和lib目录

   把对应的库放到lib目录中,把对应的头文件放在include目录中。

 

2.1.2 在.pro中添加对应信息

LIBS += -L$$PWD/lib -lSerial

INCLUDEPATH += $$PWD/include
DEPENDPATH += $$PWD/include

  

 

2.1.3 在main.cpp中添加头文件

   这样就可以直接调用共享库中的对象或者函数了。

 

2.2 自动添加库

  直接点击test,然后单间右键。里面有一个“添加库”。

 

posted @ 2020-04-28 16:05  一个不知道干嘛的小萌新  阅读(1118)  评论(0编辑  收藏  举报