QT:动态库与静态库的生成和使用

ops/2025/1/13 2:31:20/

目录

一.动态库和静态库

1.动态链接(Dynamic Linking)

2.静态链接(Static Linking)

3.选择依据

二.库的创建

1.新建文件和项目中,选择Library中C++库

2.新建一个名为libtest库

3.打印一个qDebug,用于调用

三.库的使用

1.创建名为libusertest的项目并将库libtest中头文件libtest.h和libtest_global.h复制粘贴入libusertest项目中

2.右键libusertest项目添加库,选择外部库

3.根据平台类型选择平台,然后选择库文件路径

4.选择成功后,系统会自动在pro文件中生成路径

5.调用库文件libtest中的打印

6.点击按钮,成功打印libtest库中qdebug


一.动态库和静态库

1.动态链接(Dynamic Linking)

  1. 定义

    • 动态链接库(DLL)或动态链接库(SO)在运行时被加载到程序中。
    • 程序在编译时并不包含库的代码,而是在运行时从文件系统加载。
  2. 优点

    • 更新方便:如果库更新了,不需要重新编译程序,只需替换库文件即可。
    • 节省空间:程序和库分离,可以减少程序的大小。
    • 兼容性:不同的程序可以共享同一个库版本,减少资源占用。
  3. 缺点

    • 依赖性问题:程序依赖于特定的库版本,如果库版本不兼容,可能导致程序运行出错。
    • 性能问题:动态链接可能会增加程序启动时间,因为需要额外的加载时间。

2.静态链接(Static Linking)

  1. 定义

    • 静态链接库(LIB)在编译时被直接链接到程序中。
    • 程序包含库的代码,不需要在运行时从文件系统加载。
  2. 优点

    • 独立运行:程序不依赖于外部库,可以在任何环境中独立运行。
    • 性能:因为不需要在运行时加载库,所以通常性能更好。
  3. 缺点

    • 更新困难:如果库更新,需要重新编译程序。
    • 占用空间大:程序中包含了库的完整代码,导致程序体积增大。
    • 兼容性问题:如果库的版本更新,可能需要更新所有使用该库的程序。

3.选择依据

  • 项目需求:如果项目需要频繁更新库,或者需要在不同操作系统上运行,动态链接可能是更好的选择。
  • 性能要求:如果性能是关键考虑因素,静态链接可能更合适。
  • 可移植性:如果需要确保程序在任何环境下都能运行,静态链接是必须的。

在实际开发中,开发者需要根据项目的具体需求和目标环境来选择合适的链接方式。

二.库的创建

1.新建文件和项目中,选择Library中C++库

2.新建一个名为libtest库

3.打印一个qDebug,用于调用

三.库的使用

1.创建名为libusertest的项目并将库libtest中头文件libtest.h和libtest_global.h复制粘贴入libusertest项目中

2.右键libusertest项目添加库,选择外部库

3.根据平台类型选择平台,然后选择库文件路径

4.选择成功后,系统会自动在pro文件中生成路径

5.调用库文件libtest中的打印

6.点击按钮,成功打印libtest库中qdebug


http://www.ppmy.cn/ops/108811.html

相关文章

ASP.NET Core 入门教学十九 依赖注入ioc

ASP.NET Core内置了对依赖注入(Dependency Injection,简称DI)的支持,这是一种设计模式,用于实现控制反转(Inversion of Control,简称IoC),从而使得应用程序组件之间的耦合…

24.9.9学习笔记

在深度学习中,分布式计算是指使用多台机器或多个处理器来加速训练过程,特别是在处理大规模数据集和复杂的神经网络模型时。深度学习模型往往需要大量的计算资源来训练,这导致了对高效计算方法的需求。以下是深度学习中分布式计算的一些关键概…

移植i2c-tools到ARM平台

下载源码 下载地址:https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/ 解压 修改Makefile 编译 生成的文件

使用Selenium WebDriver捕获网络请求

在进行Web自动化测试时,捕获网络请求是十分重要的。通过这种方式,我们可以了解到页面加载过程中发生的网络活动,这对于调试、性能分析以及确保应用程序按预期工作都非常有用。本文将详细介绍如何使用Selenium WebDriver和Python来实现捕获网络请求的功能。 前置要求 在开始…

漫谈设计模式 [7]:桥接模式

引导性开场 菜鸟:老鸟,我最近在开发一个图形库,要支持多种形状和不同的颜色。每种形状都有多种颜色变种,代码变得越来越复杂。每次添加一种新形状或颜色时,我都得修改很多地方,感觉很麻烦,有没…

解决移动端1px 边框优化的8个方法

前言 您是否注意到 1px 边框在移动设备上有时会显得比预期的要粗?这种不一致源于移动屏幕的像素密度不同。 在 Web 开发中,我们使用 CSS 来设置页面样式。但是,CSS 中的 1px 并不总是转换为设备上的物理 1px。这种差异就是我们的“1px 边框…

【Web】XGCTF 西瓜杯 超详细题解

目录 CodeInject tpdoor easy_polluted Ezzz_php CodeInject eval里打代码注入 11);system("tac /0*");// tpdoor 可以传参isCache给../../config/route.php写入$config[request_cache_key] 打的是CheckRequestCache中间件解析的漏洞 think\middleware\Ch…

浏览器百科:网页存储篇-如何在Chrome打开localStorage窗格(五)

1.引言 在前面的章节中,我们详细介绍了 localStorage 的基本概念、特性及其常用方法,帮助开发者在网页应用中实现数据的持久化存储。为了更好地管理和调试这些存储的数据,了解如何打开和使用浏览器的 localStorage 窗格是非常重要的。本篇文…