C++库的使用方法与使用场景
库的使用
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.在项目中引入自己的库
- 项目结构和每份代码的作用与内容如下图所示:
- 步骤:
-
附加目录中包含自定义lib文件的位置,如下图
-
为当前项目引入lib项目,如下图
-
使用“”或<>包含lib,如下
-
#include "Engine.h" //先在当前项目的相对路径中寻找指定的“Engine.h”文件,找不到再去系统文件中赵
#include <Engine.h> //直接去系统文件中找
4.编译运行从,查看结果
4.静态链接与动态链接之比较:
静态链接的优点:
-
独立性: 可执行文件包含了所有依赖的库函数和代码,使得程序在不同的系统上能够独立运行,不需要外部依赖。
-
性能: 没有动态加载的开销,因此在运行时可能更快。
部署简单: 没有额外的依赖文件,部署更为简单。
静态链接的缺点: -
文件大小: 可执行文件较大,因为它包含了所有的库函数和代码,导致占用更多的磁盘空间。
更新困难: 如果需要更新库函数,整个程序都需要重新编译和重新发布。
动态链接的优点:
-
节省空间: 不同的程序可以共享相同的库函数,节省了内存和磁盘空间。
更新方便: 可以单独更新和维护库函数,不需要重新编译整个程序。
动态链接的缺点: -
依赖性: 需要依赖外部的库文件,因此在运行时需要确保这些库文件存在并正确。
性能: 动态链接可能会在程序加载和执行时引入一些开销,例如动态加载库函数。
适用场景:
静态链接适用于:
- 需要独立部署的应用程序,例如一些嵌入式系统、单文件工具或者小型程序。
程序依赖的库函数不会频繁更新或变动的场景。
动态链接适用于:
- 多个程序需要共享相同的库函数或资源的场景,能够节省资源。
对程序启动速度和内存占用相对宽容的应用场景。
维护和更新相对方便,能够独立更新库文件的情况。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!