C静态库简介

什么是静态库

C编程语言有关的库是包含目标文件的文件,该文件可以在编译的链接阶段用作单个实体。 它们用作管理具有许多不同功能和源文件的大型项目的解决方案。 通常对库建立索引,以使链接器更容易,更快捷地找到它们中的符号。 库有两种类型:静态库和动态库。 静态库仅在链接阶段才链接到程序,在此阶段中,库中函数的目标文件将插入到可执行代码中。 动态库更加灵活,因为它们以两部分的过程链接在一起,不会导致将目标代码插入可执行文件中。 当它们与共享一个库的多个程序一起使用时,这会降低内存开销。

那么为什么要使用静态库呢? 将目标文件插入可执行文件有一个巨大的优势-即,之后运行程序所需的唯一操作就是一个可执行文件。 使用动态库运行程序可能是DLL Hell的单程票在这里,由于缺少或不正确的动态库而引起问题。 静态库产生单个可执行文件,该可执行文件更易于分发和运行。

制作方法:静态库

从我们最初的功能集合到单个库文件,需要执行几个步骤。 首先,我们需要将.c文件制成扩展名为.o目标文件。 我们通过使用以下命令来做到这一点:

  gcc -c alpha.c bravo.c charlie.c 

请记住以下事实:如果需要,我们可以使用*类的通配符将所有.c文件包括在给定目录中。 Gcc编译我们的代码,而-c标志在汇编阶段停止编译并提供给我们目标文件。 一旦有了这些,就可以使用ar命令创建,并使用ranlib命令索引我们的库。

  ar -rc library.a alpha.o bravo.o charlie.o 
ranlib库

命名库的公认标准是库 .a,但是在此示例中,我们将简单地称为文件library.a。 -r标志(如果适用)将所有过时的文件替换为较新的版本,而-c标志创建归档(如果尚不存在)。 现在我们已经创建了一个库,我们可以在想要的任何程序中使用它。 由于这不是默认库,因此我们必须告诉GCC我们正在使用哪个库,以便它复制/粘贴正确的代码。

使用以下命令,我们可以使用我们的新库来编译源代码:

  gcc source.c -L。  -llibrary -o源可执行文件 

-L选项用于指定库所在的目录,因此我们使用. 告诉它在当前目录中查找。 -l标志后紧跟库名称,告诉它要链接的库。

从图形中可以看到,当静态库链接到源文件时,库中的代码将放入生成的可执行文件中,从而使整个文件成为一个整洁的文件。