C++基础教程面向对象(学习笔记(108))

静态和动态库

一个库是一个代码包,是为了被很多程序重复使用。通常,C ++库分为两部分:

1)头文件,用于定义库向使用它的程序公开(提供)的功能。
2)预编译的二进制文件,包含预编译为机器语言的该功能的实现。

一些库可以分成多个文件和/或具有多个头文件。

由于几个原因,库被预编译。首先,由于库很少更改,因此不需要经常重新编译。每次编写使用它们的程序时重新编译库都是浪费时间。其次,因为预编译对象是机器语言,所以它阻止人们访问或更改源代码,这对于不希望出于知识产权原因而使其源代码可用的企业或人员而言非常重要。

有两种类型的库:静态库和动态库。

一个静态库(也称为存档)由直接编译并链接到程序中的例程组成。编译使用静态库的程序时,程序使用的静态库的所有功能都将成为可执行文件的一部分。在Windows上,静态库通常具有.lib扩展名,而在Linux上,静态库通常具有.a(存档)扩展名。静态库的一个优点是您只需分发可执行文件,以便用户运行您的程序。因为库成为程序的一部分,所以这可以确保库的正确版本始终与您的程序一起使用。此外,因为静态库成为程序的一部分,所以您可以像为自己的程序编写的函数一样使用它们。在不利方面,因为库的副本成为使用它的每个可执行文件的一部分,这可能会导致大量浪费的空间。静态库也无法轻松升级、更新库,需要更换整个可执行文件。

一个动态库(也称为共享库)由被加载到您在运行时应用程序的。编译使用动态库的程序时,库不会成为可执行文件的一部分,它仍然是一个单独的单元。在Windows上,动态库通常具有.dll(动态链接库)扩展名,而在Linux上,动态库通常具有.so(共享对象)扩展名。动态库的一个优点是许多程序可以共享一个副本,从而节省空间。也许更大的优势是动态库可以升级到更新的版本,而无需替换使用它的所有可执行文件。

由于动态库未链接到您的程序中,因此使用动态库的程序必须显式加载动态库并与其交互。这种机制可能令人困惑,并且使得与动态库的接口变得笨拙。为了使动态库更易于使用,可以使用导入库。

一个导入库是自动加载和利用动态库的过程库。在Windows上,这通常通过与动态库(.dll)同名的小型静态库(.lib)完成。静态库在编译时链接到程序中,然后可以有效地使用动态库的功能,就像它是静态库一样。在Linux上,共享对象(.so)文件兼作动态库和导入库。大多数链接器可以在创建动态库时为动态库构建导入库。

安装和使用库

现在你已经了解了不同类型的库,让我们来谈谈如何在程序中实际使用库。使用C ++安装库通常涉及4个步骤:

1)获取library。最好的选择是为您的操作系统下载预编译的软件包(如果存在),这样您就不必自己编译库。如果没有为您的操作系统提供,则必须下载仅源代码的软件包并自行编译(这超出了本课程的范围)。在Windows上,库通常以.zip文件的形式分发。在Linux上,库通常作为包(例如.RPM)分发。您的包管理器可能已经列出了一些更流行的库(例如SDL)以便于安装,因此请先检查一下。

2)安装库。在Linux上,这通常涉及调用包管理器并让它完成所有工作。在Windows上,这通常涉及将库解压缩到您选择的目录。我们建议您将所有库保存在一个位置以便于访问。例如,使用名为C:\ Libs的目录,并将每个库放在它自己的子目录中。

3)确保编译器知道在哪里查找库的头文件。在Windows上,通常这是您安装库文件的目录的include子目录(例如,如果您将库安装到C:\ libs \ SDL-1.2.11,则头文件可能位于C:\ libs \ SDL中) -1.2.11 \包括)。在Linux上,库通常安装在/ usr / include中,它应该已经成为包含文件搜索路径的一部分。但是,如果文件安装在别处,则必须告诉编译器在哪里找到它们。

4)告诉链接器在哪里查找库文件。与步骤3一样,这通常涉及将目录添加到链接器查找库的位置列表中。在Windows上,这通常是您安装库文件的目录的/ lib子目录。在Linux上,库通常安装在/ usr / lib中,它应该已经是库搜索路径的一部分。

安装库并且IDE知道在哪里查找它之后,通常需要为每个想要使用该库的项目执行以下3个步骤:

5)如果使用静态库或导入库,请告诉链接器链接哪些库文件。

6)#include程序中库的头文件。这告诉编译器库提供的​​所有功能,以便您的程序能够正确编译。

7)如果使用动态库,请确保程序知道在哪里找到它们。在Linux下,库通常安装在/ usr / lib中,它位于默认搜索路径中。在Windows上,默认搜索路径包括运行程序的目录,通过调用SetDllDirectory()设置的目录,Windows,System和System32目录以及PATH环境变量中的目录。使用.dll的最简单方法是将.dll复制到可执行文件的位置。由于您通常会将.dll与您的可执行文件一起分发,因此将它们保持在一起是有意义的。

步骤3-5涉及配置IDE, 幸运的是,在执行这些操作时,几乎所有IDE的工作方式都相同。不幸的是,因为每个IDE都有不同的接口,这个过程中最困难的部分是简单地定位在哪里的适当位置,以执行这些步骤。您应该有足够的信心,来通过一点点搜索对您自己的IDE执行相同的操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章