Tag: 静态库

使用和创建C静态库

随着C程序的发展,您开始具有许多不同的功能。 这会变得凌乱! 当需要在编译过程中进行链接时,计算机将不得不处理许多目标文件,这使其效率低下。 减少总时间并提高效率的一种方法是利用C库。 AC库包含可链接并用于执行特定任务的功能列表。 无需调用许多不同的文件,您可以引用单个库。 使用此方法将优化编译过程,其原因有两个: 1)由于C库已建立索引,因此很容易找到所需和应链接的符号,例如函数和变量。 2)C库将所有功能放在一个位置,从而在链接过程中打开的文件较少。 UNIX系统允许我们创建2种C库。 静态和共享 。 (在此博客文章中,我将只讨论静态库) 静态库是直接链接到可执行文件中的函数的集合(如前所述)。 因此,当需要运行该文件时,您只需要一个文件。 之所以称其为“静态”,是因为可执行文件现在将保持不变,除非您要操纵该库并重新对其进行编译。 要创建静态库,您想使用2个命令。 第一个是: ar命令是“ archiver”的缩写,它用于创建静态库“ sonialib.a”。该命令后的* .o仅指示该库中应包含当前工作目录中的所有.o文件。 在ar之后添加的c标志告诉它创建库,无论它是否存在。 然后, r标志告诉它用新的替换旧的目标文件。 创建存档后,便需要对库进行索引。 这是使用ranlib命令完成的: 创建存档后,您现在可以在程序中使用它了。 如前所述,要使用库,您需要在编译期间将其链接。 此命令行将编译您的c文件,并使用sonialib中找到的所有必要符号。 –L。 标志告诉链接器,可以在任何给定目录中找到sonialib。 在编译过程中,使用静态库是更有效的选择,因为所有目标文件都直接放置在可执行文件中。 但是,如果您要对程序进行更改,那么它通常会被认为是效率低下的库,因为每次更改时都必须重新编译和链接文件。

静态库介绍

当程序开始变得健壮并在计算机的不同区域中使用许多功能时,计算机要立即链接并编译它们就成了一项任务。 但是,我们注定不能减慢编译时间! 库通过将功能的所有目标文件放在一个位置来使此过程更有效。 我们可以制作两种不同类型的库:静态库或动态库。 让我们看一下静态库对大型项目有何好处。 在进入图书馆程序之前,我想快速描述文件格式。 它们采用文件名末尾的扩展名形式,例如“ .html”和“ .c”。 这是计算机将编码信息存储在磁盘上某些区域中的一种方法,因此,在尝试查找要选择的文件时,计算机可以浏览更小的数据部分。 但是有时候,您可能会拥有许多相同格式的文件,以至于搜索所有文件的速度并不快。 这就是静态库的主要效率所在。 创建 当仅使用程序所需的目标文件时,在内存中分配甚至更多的定义空间将比仅文件格式更为有效。 我们可以使用以下命令为目标文件创建一个静态库: ar -rc static_lib.a util_file.o util_net.o util_math.o […] “ ar”命令或“档案”用于创建,修改和提取单个文件,该文件包含其他文件的集合。 此命令添加了“ c”,如果库不存在,它将创建该库,并添加“ r”以用已包含的新文件替换旧文件。 运行以下命令也是一个好主意: ranlib static_lib.a 某些系统可能会在ar中执行“ ranlib”命令所执行的过程,从而为目标文件创建索引,并加快符号连接。 并非所有系统都相同,并且这两个命令的规则不同,例如,在GNU程序中,该命令与ar -s相同。 用法 现在已经创建了库,我们可以在编译程序时使用它: gcc main.o -L。 -lstatic_lib -o编 这将在静态库中查找可能在目标文件main.o中使用的符号。 -L。 标记将查找库的当前目录,这将使您的计算机更轻松地完成该过程。 最终结果将是一个正常的可执行文件,由目标文件main制成。 即使它与不带库的已编译程序相同,成功之处还是在于它建立编译过程的效率如何,对于程序使用许多不同的工具并需要尽可能有效的情况至关重要。