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

news2024/11/13 9:24:58

目录

一.动态库和静态库

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.coloradmin.cn/o/2107856.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PCA数据降维技术详解

在数据分析和机器学习的世界里,维度灾难是一个不可忽视的问题。随着数据维度的增加,计算量急剧上升,模型复杂度变高,同时可能引入噪声和冗余信息,影响模型的性能和解释性。主成分分析(Principal Component …

第六篇——黄金分割:毕达哥拉斯如何连接数学和美学?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 人眼看到的美的东西,都可以从数学这个抽象的学科中得到明确的…

网页打印模板解析源码--SAAS本地化及未来之窗行业应用跨平台架构

一、打印模板解析 /* ///cyberwin_offline_database_printtemp.js未来之窗打印模板解析技术 2024-09 */ class CyberWin_Database_printtemp_KV {constructor() {this.data {};this.line_count 0 ;}解析(数据) {// this.data[key] value;this.line_count 0 ;this.data {}…

生日(仅粉丝可见,生日是9月6日,提前一天发的)

祝我自己生日快乐! 感谢大家的陪伴与支持,以后我会努力做作品的! (累谁也不能累自己,所以我打算放3天假,反正延迟开学,先玩了来再去上学!)

数据库超时排查

背景: 项目是用的springboot,连接池用的是hikaricp,且数据库连接做了LB配置,之前就是经常会有数据库出现问题,专家给到的解决方案。 数据连接io超时报错,排查了当时数据库各项指标都无显示异常,…

基于SA-BP模拟退火算法优化BP神经网络实现数据预测Python实现

在数据分析和机器学习领域,时间序列预测和多输入单输出系统的预测是重要且复杂的问题。传统的BP(反向传播)神经网络虽然具有强大的非线性函数逼近能力,但在处理这些问题时容易陷入局部极小值、训练速度慢以及过拟合等问题。为了克…

【读书笔记-《30天自制操作系统》-15】Day16

本篇内容继续多任务的讲解。上一篇中实现了两个任务之间的自动切换,但还不够通用,这里将其优化为多个任务之间的切换。接着引入了任务休眠的概念与休眠的程序实现。最后介绍了任务的优先级,一种用切换时间的长短来衡量,一种用Task…

【Qt】文件对话框QFileDialog

文件对话框QFileDialog ⽂件对话框⽤于应⽤程序中需要打开⼀个外部⽂件或需要将当前内容存储到指定的外部⽂件。 通过QFileDialog 可以选择一个文件,能够获取到这个文件的路径,打开文件/保存文件。 常⽤⽅法介绍: 1、打开⽂件(⼀…

【高中生讲机器学习】17. 讲人话的主成分分析,它来了!(上篇)

创建时间:2024-08-13 首发时间:2024-09-05 最后编辑时间:2024-09-05 作者:Geeker_LStar 你好呀~这里是 Geeker_LStar 的人工智能学习专栏,很高兴遇见你~ 我是 Geeker_LStar,一名准高一学生,热爱…

Redis 集群高可用详解及配置

关型数据库 关系型数据库: 是建立在关系模型基础上的数据库,其借助于集合代数等数学概念和方法来处理数据库中的数据 主流的 MySQL、Oracle、MS SQL Server 和 DB2 都属于这类传统数据库 关型数据库的优缺点 特点: 1、数据关系模型基于关系…

Redis使用——Redis的redis.conf配置注释详解(三)

Redis使用——Redis的redis.conf配置注释详解(三) 背景 日常我们开发时,我们会遇到各种各样的奇奇怪怪的问题(踩坑o(╯□╰)o),这个常见问题系列就是我日常遇到的一些问题的记录文章系列,这里整…

鸿蒙轻内核M核源码分析系列四 中断Hwi

往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 持续更新中…… 在鸿蒙轻内核源码分析系列前几篇文章中,剖析了重要的数据结构。本文,我们讲述一下中断,会给读者介绍中…

Ubuntu固定USB串口名(包括1拖N的USB串口)

在运行Ubuntu系统的开发板上,如果使用可插拔的USB串口,有时候程序正在运行时,如果突然连接传感器的USB串口设备被插拔了一下,这时,会发现系统中的USB串口名发生了改变。例如,插拔之前是/dev/ttyUSB0,插拔之后变成了/dev/ttyUSB3。发生这种情况的时候,有时候会导致程序无…

Windows I/O系统

硬件存储体系 寄存器 处理器内部定义的存储体,它们除了存储功能,往往还兼有其他的能力,比如参与运算,地址解析,指示处理器的状态,等等。寄存器是由处理器内部专门的触发器电路实现的,处理器往…

jupyter里怎么设置代理下载模型

使用如下方式: %env http_proxyhttp://10.110.146.100:7890 %env https_proxyhttp://10.110.146.100:7890

【SLAM】GNSS的定义,信号原理以及RTK在多传感器融合中的使用方法

【SLAM】GNSS的定义,信号原理以及在多传感器融合中的使用方法 1. GNSS的定义2. GNSS信号原理3. RTK - Real Time Kinematic4。 如何使用RTK做融合和优化 1. GNSS的定义 GPS(Global Positioning System)和GNSS(Global Navigation …

Ubuntu22.04安装colmap

首先上这里查看自己电脑GPU的CMAKE_CUDA_ARCHITECTURES 终端输入以下内容安装预先的前置依赖 sudo apt-get install \git cmake ninja-build build-essential \libboost-program-options-dev libboost-filesystem-dev \libboost-graph-dev libboost-system-dev libboost-tes…

【操作系统存储篇】操作系统的设备管理

目录 一、广义的IO设备 分类 按使用特性分类 按信息交换的单位分类 按设备的共享属性分类 按传输速率分类 二、IO设备的缓冲区 三、SPOOLing技术 一、广义的IO设备 输入设备:对CPU而言,凡是对CPU进行数据输入的。 输出设备:对CPU而…

深度解析:基于离线开发的数据仓库转型落地案例

在当今这个数据驱动的时代,各行各业都正经历着前所未有的变革。伴随技术的飞速发展,数据仓库作为企业数据管理与分析的核心,如何更好地发挥作用,助力企业保持业务的敏捷性与成本效益,成为大家关心的焦点问题。本文将通…

vue使用html2Canvas导出图片 input文字向上偏移

vue使用html2Canvas导出图片 input文字向上偏移 图中 用的是element的输入框 行高 32px,经常测试 你使用原生的input 还是会出现偏移。 解决方法:修改css样式 1.怎么实现导出 网上随便找很多 2.在第一步 获取你要导出的元素id 克隆后 修改他的样式或者 你直接在你需…