Qt创建动态库

最新查询利用Qt创建动态库的步骤,发现图文解释都不够详细,于是自己总结一个较为详细的图文步骤。

Windows平台下Qt创建和调用动态库

创建动态库

创建Qt动态库的详细步骤如下:

  1. 打开Qt Creator,创建一个新的项目。选择 “Library” 作为项目类型,然后选择 “C++ Library”。

    在这里插入图片描述

  2. 在 “Library” 选项卡中,命名项目名称,并设置存放路径。

    在这里插入图片描述

  3. 点击 “Next”,在Details部分,设置库类型,类名称,以及Qt模块类型

    在这里插入图片描述

  4. 根据需要选择构建套件(编译工具),随后点击下一步

    在这里插入图片描述

  5. 项目创建完成后,会生成一个MyLib_global.h,在windows平台下默认生成如下内容:

    #ifndef MYLIB_GLOBAL_H
    #define MYLIB_GLOBAL_H
    
    #if defined(_MSC_VER) || defined(WIN64) || defined(_WIN64) || defined(__WIN64__) || defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__)
    #  define Q_DECL_EXPORT __declspec(dllexport)
    #  define Q_DECL_IMPORT __declspec(dllimport)
    #else
    #  define Q_DECL_EXPORT     __attribute__((visibility("default")))
    #  define Q_DECL_IMPORT     __attribute__((visibility("default")))
    #endif
    
    #if defined(MYLIB_LIBRARY)
    #  define MYLIB_EXPORT Q_DECL_EXPORT
    #else
    #  define MYLIB_EXPORT Q_DECL_IMPORT
    #endif
    
    #endif // MYLIB_GLOBAL_H
    

    默认生成的mylib.h的内容为:

    #ifndef MYLIB_H
    #define MYLIB_H
    
    #include "MyLib_global.h"
    
    class MYLIB_EXPORT MyLib
    {
    public:
        MyLib();
    };
    
    #endif // MYLIB_H
    

​ 可以看到其中包含了==#include “MyLib_global.h”,并且类定义中包含了MYLIB_EXPORT==。

  1. 向MyLib项目添加一个新的类对象Worker,注意worker的头文件中要添加#include "MyLib_global.h"并在类名前面添加MYLIB_EXPORT,将其头文件和源文件实现如下:

    worker.h

    #ifndef WORKER_H
    #define WORKER_H
    
    #include <iostream>
    #include <string>
    #include "MyLib_global.h"
    
    using namespace std;
    using uint = unsigned int;
    
    class MYLIB_EXPORT Worker
    {
    private:
        string name;
        uint age;
        uint Id;
        uint rank = 7;
    public:
        Worker(); 
        Worker(string m_name, uint m_age, uint m_Id);
        Worker(string m_name, uint m_age, uint m_Id, uint m_rank);
        uint getRank();
        void setRank(uint m_rank);
        void workerInfo();
    };
    
    #endif // WORKER_H
    

    worker.cpp

    #include "worker.h"
    
    Worker::Worker()
    {
    
    }
    
    Worker::Worker(string m_name, uint m_age, uint m_Id)
    {
        name = m_name;
        age = m_age;
        Id = m_Id;
    }
    
    Worker::Worker(string m_name, uint m_age, uint m_Id, uint m_rank)
    {
        Worker(m_name, m_age, m_Id);
        rank = m_rank;
    }
    
    uint Worker::getRank()
    {
        return rank;
    }
    
    void Worker::setRank(uint m_rank)
    {
        rank = m_rank;
    }
    
    void Worker::workerInfo()
    {
        cout << "name:" << name << ",age:" << age << ",id:" << Id << ",rank" << rank << endl;
    }
    

    注意也可以直接添加现有的头文件和源文件,只需要向Worker类一样引入头文件#include "MyLib_global.h"并在类定义中添加MYLIB_EXPORT。

  2. 随后保存构建项目,在构建设置中,找到构建目录,项目构建完成后,会在该目录下生成"MyLib.dll"文件

在这里插入图片描述

在这里插入图片描述

调用动态库

  1. 新建一个Qt项目,命名为"LoadMyLib"

    在这里插入图片描述

  2. 项目创建完成后,将动态库中的头文件放在项目路径中,必须包含"MyLib_global.h",并加上"mylib.h"和"worker.h"

    在这里插入图片描述

  3. 在项目路径创建一个lib文件夹,并存放生成的"MyLib.dll"文件

    在这里插入图片描述

  4. 在LoadMyLib中添加现有文件,即"MyLib_global.h",“mylib.h"和"worker.h”

    在这里插入图片描述

  5. 在LoadMyLib.pro配置文件中加上LIBS用于指示编译器链接到项目所需的静态库或动态库文件(.so、.dll),注意这里的路径时相对于项目的构建目录的,一定要正确配置路径。

    在这里插入图片描述

  6. 在主程序中引入需要的头文件,并编写测试代码

    在这里插入图片描述

  7. 构建Qt项目,但此时编译运行没有结果,还需要在项目的构建路径中放入"MyLib.dll"文件

    在这里插入图片描述

  8. 此时重新构建项目,并运行,就能够看到如下运行结果,说明调用动态库成功。

    在这里插入图片描述

  • 11
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值