欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Qt动态库和静态库的创建和使用

程序员文章站 2022-07-14 09:31:01
...

动态库(共享库)的创建

在Qt Creator中新建项目,选择Library

Qt动态库和静态库的创建和使用
点击“Choose”进入下一步

选择创建库的类型:共享库

Qt动态库和静态库的创建和使用

选择Kit套件

Qt动态库和静态库的创建和使用

选择需要的模块

Qt动态库和静态库的创建和使用

配置工程路径、名字等

Qt Creator自动创建的文件

我配置的动态库名字为:Share 
Qt动态库和静态库的创建和使用

pro文件内容

QT       -= gui #在选择需要的模块时,我只选用了QtCore,没有使用QtGui
TARGET = Share #我配置的动态库的名字:Share
TEMPLATE = lib #生成库时该字段为lib;生成执行文件时为:app
DEFINES += SHARE_LIBRARY #将SHARE_LIBRARY添加为编译时的预处理器宏,在share_global.h中使用
SOURCES += Share.cpp
HEADERS += Share.h\ #使用动态库时需要这两个头文件
        share_global.h
unix {
    target.path = /usr/lib
    INSTALLS += target
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

share_global.h分析

#ifndef SHARE_GLOBAL_H
#define SHARE_GLOBAL_H

#include <QtCore/qglobal.h>
//使用了pro中DEFINES += SHARE_LIBRARY,选用Q_DECL_EXPORT
//Q_DECL_EXPORT:必须添加到符号声明中(共享库项目) 
//Q_DECL_IMPORT:必须添加到符号声明中(使用共享库的客户项目)
//不知道这两个有什么区别???
#if defined(SHARE_LIBRARY)
#  define SHARESHARED_EXPORT Q_DECL_EXPORT
#else
#  define SHARESHARED_EXPORT Q_DECL_IMPORT
#endif

#endif // SHARE_GLOBAL_H
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

动态库(共享库)的使用

添加动态库的Qt动态库和静态库的创建和使用头文件

我定义的头文件为Share.h、share_global.h,将这两个头文件拷贝到使用库的工程目录中,并添加到工程中

添加库路径

在pro中添加动态库的路径 
LIBS += “E:/…/libshare.a”

部署动态库

因为是动态库,没有编译到可执行文件中,所以需要将动态库,部署到可执行文件的能够使用的库路径中,一般放到可执行文件同目录下。

静态库的创建

在Qt Creator中新建项目,选择Library

Qt动态库和静态库的创建和使用
点击“Choose”进入下一步

选择创建库的类型:静态链接库

Qt动态库和静态库的创建和使用

其他步骤与动态库创建相同

Qt Creator自动创建的文件

我创建的静态链接库名字为:Static 
Qt动态库和静态库的创建和使用

pro文件内容

QT       -= gui #在选择需要的模块时,我只选用了QtCore,没有使用QtGui
TARGET = static #我配置的静态库名字:static
TEMPLATE = lib  #生成库时该字段为lib;生成执行文件时为:app
CONFIG += staticlib #编译选项,使用静态库staticlib,默认是动态库
SOURCES += Static.cpp
HEADERS += Static.h #使用静态库时,需要该头文件
unix {
    target.path = /usr/lib
    INSTALLS += target
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

静态库的使用

添加头文件

我定义的头文件为Static.h,将这个头文件拷贝到使用库的工程目录中,并添加到工程中

添加库路径

在pro中添加动态库的路径 
LIBS += “E:/…/libstatic.a”

不用部署

静态库时在编译时,编译进可执行文件中,不需要部署。