• <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,然后单间右键。里面有一个“添加库”。

  • 相关阅读:
    poj1228 Grandpa's Estate
    poj1113 Wall
    poj2826 An Easy Problem?!
    poj1269 Intersecting Lines
    poj3304 Segments
    BZOJ3832Rally题解
    BZOJ2802Warehouse Store题解
    李超树详解
    BZOJ4241历史研究题解
    洛谷2050 BZOJ2897美食节题解
  • 原文地址:https://www.cnblogs.com/zhuangquan/p/12794898.html
Copyright © 2020-2023  润新知