Qt-静态库

前言

1. 本文中所有的代码案例使用Qt创建,CMake构建、Windows端使用MinGW编译、Linux端使用GNU编译。

一 库简介

1. 库是将一些写好的函数和变量代码整合在一起,编译生成库文件,以提供给程序使用。作用是为了复用代码,保护源代码。

2. 静态库

2.1 静态库在程序的链接阶段就被复制到了程序中,程序在运行时和静态库再无瓜葛。

2.2 静态库被打包到了应用程序中,加载速度更快,但占用空间更大,消耗资源更多; 更新部署时需要将全部程序重新编译链接后再发给用户。

2.3 Windows MSVC编译生成的静态库后缀名为 .lib,MinGW 编译生成的静态库后缀名为 .a;Linux 静态库的格式为 liaXXX.a

3. 动态库

3.1 动态库又名共享库,在程序运行时才被动态的加载到程序内存空间中,不占用程序的空间和资源,但加载速度相较静态库更慢。
3.2 更新部署时不需要重新编译全部程序,只更新相应的动态库即可。
3.3 导入库:动态库的 lib 文件叫导入库,和静态库不同,导入库仅包含地址符号表,用来映射动态库中的函数、变量。Linux 动态库没有导入库。

3.4 Windows 动态库的后缀名为 .lib,Linux 动态库的格式为 libXXX.so

二 静态库 

1. Qt 向导创建静态库的步骤

1. 点击创建项目,选择:库 ->C++ Library

2. 输入项目名称和项目创建路径

3. 选择构建工具:CMake

4. 在定义工程详情界面,选择库的类型为:Statically Linked Library(静态库)、选择用到的 Qt 模块、静态库类名、头文件和源文件
    补充:Qt 模块有三个:Core、Gui、Widget

 4.1 Core (QtCore)是 Qt 的基础模块,提供了基本的数据结构、字符串处理、时间日期处理、文件和目录操作、流处理、国际化(i18n)支持、事件处理、线程管理、定时器、插件系统等核心功能。

 4.2 Gui (QtGui)模块构建在 QtCore 之上,提供了图形用户界面的基础元素,包括颜色、字体、图标、绘图、2D 图形渲染、图像处理、窗口系统集成、事件处理(针对鼠标、键盘等输入设备)、以及基本的用户界面控件(如按钮、标签等),但不包括复杂的界面部件(如对话框、布局管理器等)。

 4.3 Widgets (QtWidgets)模块是基于 QtGui 的更高层次模块,它包含了大量预建的用户界面部件(Widgets),如按钮(Button)、标签(Label)、文本框(LineEdit)、列表视图(ListView)、表格视图(TableWidget)等。

5. 选择翻译语言、编译套件、代码版本管理等

6. 静态库创建完成

2.  CMakeLists.txt 设置静态库的生成路径

#注意:静态库生成路径设置应该在任何 add_library 命令之前进行

#1. 设置静态库的生成路径_ Debug 模式
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/../../../lib/debug")

#2. 设置静态库的生成路径_ Release 模式
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/../../../lib/release")

3. 使用静态库的步骤

1. 在使用静态库的项目下创建一个目录:include;将静态库文件和头文件(.h)拷贝到该目录下。
2. 指定库的头文件所在路径

    如果使用 CMake 构建,可以直接修改 CMakeLists.txt 文件,在文件中添加以下内容:

注意:指定库的头文件所在路径要在生成使用静态库的项目之前

#指定库的头文件所在路径
include_directories(${PROJECT_SOURCE_DIR}/include)

#打印变量PROJECT_SOURCE_DIR的路径
message(STATUS "PROJECT_SOURCE_DIR123456789: ${PROJECT_SOURCE_DIR}")
3. 链接静态库

    如果使用 CMake 构建,可以直接修改 CMakeLists.txt 文件,在文件中添加以下内容:

#注意:链接静态库要在生成使用静态库的项目之前

#指定库文件所在路径
link_directories(${PROJECT_SOURCE_DIR}/include)

#链接静态库
link_libraries(libCreatorWindowsStaticLibd.a)
4. 在项目中引用库的头文件,使用库。

#include "qtstaticlib.h"

    QtStaticLib abc;
    abc.ShowMyWindow();

4. 说明

4.1 静态库和使用静态库的项目的生成模式应该一样,要么都是 Debug;要么都是 Release。

4.2 为区分 Debug 和 Release 版本的库,Debug 版本的库名称后面一般加一个字符 'd' 进行区分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值