C++库的使用方法与使用场景

2023-12-18 23:30:11

1.库的定义及使用场景

在C++中,库(Library)是一组预编译的可重用代码和数据,其目的是提供特定功能的模块化集合。使用库可以方便地将一组功能打包成单个单元,使得开发者能够更加高效地构建应用程序,而不必重新编写所有代码。

常见的C++库类型包括:

  • 标准库(Standard Library): C++标准库提供了一系列核心功能,包括输入输出、字符串处理、容器、算法等。标准库通常分为两个主要部分:C标准库(如 cstdio)和C++标准库(如 iostream)。

  • 第三方库(Third-party Libraries): 这些库由第三方组织或个人开发,用于提供各种各样的功能,例如图形学、网络通信、数据库连接等。常见的第三方库有 Boost、OpenCV、SFML 等。

  • 图形用户界面库(GUI Libraries): 用于创建图形用户界面的库,例如 Qt、GTK、wxWidgets 等。

  • 数学和科学计算库: 用于处理数学和科学计算的库,例如 Eigen、Armadillo、BLAS 等。

  • 网络库: 用于处理网络通信的库,例如 Boost.Asio、cpp-netlib 等。

  • 多媒体库: 用于处理音频、视频等多媒体数据的库,例如 SDL、OpenAL 等。

  • 数据存储库: 用于数据库连接和数据存储的库,例如 SQLite、MySQL Connector/C++ 等。

  • 测试框架: 用于进行单元测试的库,例如 Google Test、Catch2 等。

  • 加速库: 用于利用硬件加速(如GPU)的库,例如 CUDA、OpenCL 等。

  • 并发库: 用于支持并发编程的库,例如 C++11 中引入的 thread、mutex 等。

2.静态链接库和动态链接库(外部库)

  • 静态链接:

静态链接会在编译时将库的代码和可执行文件链接在一起,生成一个独立的可执行文件。链接器会将库的代码复制到最终的可执行文件中。

  • 动态链接:

动态链接器在运行时加载程序所需的库。可执行文件仅包含对库的引用,而实际的库文件在运行时会被动态加载。

以动态链接库为例进行方法总结归纳:

静态链接库唯一不同的一点就是不需要手供拷贝.dll文件,使exe可执行文件与dll文件在同一个文件夹下

(1)下载二进制文件(lib)

在这里插入图片描述

(2)解压安装

在这里插入图片描述

  • include文件夹下主要是头文件,是对这个库中相关函数的声明

在这里插入图片描述

  • lib-vc2022下主要是用于vs2022环境下的lib文件

在这里插入图片描述

glfw3.lib:
这是 GLFW 库的静态链接库文件。在使用静态链接时,它允许编译器将 GLFW 的功能和代码直接嵌入到生成的可执行文件中。

glfw3.dll:
这是 GLFW 库的动态链接库文件(Windows)。它包含了 GLFW 的代码和功能,但是在运行时被动态加载到程序中。

glfw3dll.lib:
这个文件通常用于 Windows 上动态链接 GLFW 库。它是 GLFW 动态链接库的导入库文件,允许程序在编译时引用动态链接库。

glfw3_mt.lib:
这可能是针对多线程构建的 GLFW 静态库的版本。名称中的“mt”通常代表“multi-threaded”。此库可能与多线程程序一起使用,以支持在多线程环境中正确地使用 GLFW。

(3)附加包含目录

相当于当前解决方案下,有一个“E:\dev\HelloLib\Dependencies\GLFW\include\GLFW”目录,glfw3.h在这个目录下,因此在代码中我们可以直接使用“”或<>包含。

在这里插入图片描述

(4)附加库目录

相当于当前解决方案下有一个“E:\dev\HelloLib\Dependencies\GLFW\lib-vc2022”的虚拟目录,glfw3dll.lib在其中。

在这里插入图片描述

(5)将dll文件copy一份,粘贴到生成的exe文件的文件夹下

在这里插入图片描述

(6)重新生成当前项目,运行查看结果

在这里插入图片描述

3.在项目中引入自己的库

  • 项目结构和每份代码的作用与内容如下图所示:
    在这里插入图片描述
  • 步骤:
    1. 附加目录中包含自定义lib文件的位置,如下图
      在这里插入图片描述

    2. 为当前项目引入lib项目,如下图
      在这里插入图片描述

    3. 使用“”或<>包含lib,如下

#include "Engine.h" //先在当前项目的相对路径中寻找指定的“Engine.h”文件,找不到再去系统文件中赵
#include <Engine.h> //直接去系统文件中找

4.编译运行从,查看结果
在这里插入图片描述

4.静态链接与动态链接之比较:

静态链接的优点:

  • 独立性: 可执行文件包含了所有依赖的库函数和代码,使得程序在不同的系统上能够独立运行,不需要外部依赖。

  • 性能: 没有动态加载的开销,因此在运行时可能更快。
    部署简单: 没有额外的依赖文件,部署更为简单。
    静态链接的缺点:

  • 文件大小: 可执行文件较大,因为它包含了所有的库函数和代码,导致占用更多的磁盘空间。
    更新困难: 如果需要更新库函数,整个程序都需要重新编译和重新发布。

动态链接的优点:

  • 节省空间: 不同的程序可以共享相同的库函数,节省了内存和磁盘空间。
    更新方便: 可以单独更新和维护库函数,不需要重新编译整个程序。
    动态链接的缺点:

  • 依赖性: 需要依赖外部的库文件,因此在运行时需要确保这些库文件存在并正确。
    性能: 动态链接可能会在程序加载和执行时引入一些开销,例如动态加载库函数。
    适用场景:

静态链接适用于:

  • 需要独立部署的应用程序,例如一些嵌入式系统、单文件工具或者小型程序。
    程序依赖的库函数不会频繁更新或变动的场景。

动态链接适用于:

  • 多个程序需要共享相同的库函数或资源的场景,能够节省资源。
    对程序启动速度和内存占用相对宽容的应用场景。
    维护和更新相对方便,能够独立更新库文件的情况。

文章来源:https://blog.csdn.net/liukuande/article/details/135069068
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。