在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 等。
- 静态链接:
静态链接会在编译时将库的代码和可执行文件链接在一起,生成一个独立的可执行文件。链接器会将库的代码复制到最终的可执行文件中。
- 动态链接:
动态链接器在运行时加载程序所需的库。可执行文件仅包含对库的引用,而实际的库文件在运行时会被动态加载。
以动态链接库为例进行方法总结归纳:
静态链接库唯一不同的一点就是不需要手供拷贝.dll文件,使exe可执行文件与dll文件在同一个文件夹下
glfw3.lib:
这是 GLFW 库的静态链接库文件。在使用静态链接时,它允许编译器将 GLFW 的功能和代码直接嵌入到生成的可执行文件中。
glfw3.dll:
这是 GLFW 库的动态链接库文件(Windows)。它包含了 GLFW 的代码和功能,但是在运行时被动态加载到程序中。
glfw3dll.lib:
这个文件通常用于 Windows 上动态链接 GLFW 库。它是 GLFW 动态链接库的导入库文件,允许程序在编译时引用动态链接库。
glfw3_mt.lib:
这可能是针对多线程构建的 GLFW 静态库的版本。名称中的“mt”通常代表“multi-threaded”。此库可能与多线程程序一起使用,以支持在多线程环境中正确地使用 GLFW。
相当于当前解决方案下,有一个“E:\dev\HelloLib\Dependencies\GLFW\include\GLFW”目录,glfw3.h在这个目录下,因此在代码中我们可以直接使用“”或<>包含。
相当于当前解决方案下有一个“E:\dev\HelloLib\Dependencies\GLFW\lib-vc2022”的虚拟目录,glfw3dll.lib在其中。
附加目录中包含自定义lib文件的位置,如下图
为当前项目引入lib项目,如下图
使用“”或<>包含lib,如下
#include "Engine.h" //先在当前项目的相对路径中寻找指定的“Engine.h”文件,找不到再去系统文件中赵
#include <Engine.h> //直接去系统文件中找
4.编译运行从,查看结果
静态链接的优点:
独立性: 可执行文件包含了所有依赖的库函数和代码,使得程序在不同的系统上能够独立运行,不需要外部依赖。
性能: 没有动态加载的开销,因此在运行时可能更快。
部署简单: 没有额外的依赖文件,部署更为简单。
静态链接的缺点:
文件大小: 可执行文件较大,因为它包含了所有的库函数和代码,导致占用更多的磁盘空间。
更新困难: 如果需要更新库函数,整个程序都需要重新编译和重新发布。
动态链接的优点:
节省空间: 不同的程序可以共享相同的库函数,节省了内存和磁盘空间。
更新方便: 可以单独更新和维护库函数,不需要重新编译整个程序。
动态链接的缺点:
依赖性: 需要依赖外部的库文件,因此在运行时需要确保这些库文件存在并正确。
性能: 动态链接可能会在程序加载和执行时引入一些开销,例如动态加载库函数。
适用场景:
静态链接适用于:
动态链接适用于: